catch-img

【Llama2】日本語モデル | ELYZA-japanese-Llama-2-7b・13b

この記事では、Llama2の日本語学習済みモデル「ELYZA-japanese-Llama-2」の使い方について解説しています。


目次[非表示]

  1. 1.Llama2とは
  2. 2.Llama2の日本語学習済みモデル「ELYZA-japanese-Llama-2」
  3. 3.商用利用が可能
  4. 4.日本語LLMで最高水準
  5. 5.モデルのバリエーション
  6. 6.モデルを動かすにはGPUが必要
  7. 7.実行環境
  8. 8.Jupyter Labを起動
  9. 9.必要なパッケージのインストール
  10. 10.モデルとトークナイザーを読み込む関数
  11. 11.モデル・トークナイザーを読み込む
  12. 12.モデルを使用してテキストを生成する関数
  13. 13.生成タスク1
    1. 13.1.プロンプト
    2. 13.2.生成結果
  14. 14.生成タスク2
    1. 14.1.プロンプト
    2. 14.2.生成結果
  15. 15.生成タスク3
    1. 15.1.プロンプト
    2. 15.2.生成結果
  16. 16.生成タスク4
    1. 16.1.プロンプト
    2. 16.2.生成結果
  17. 17.LLMならGPUクラウド
  18. 18.まとめ


Llama2とは

Llama2(Large Language Model Meta AI 2/ラマツー)とは、Facebookを運営するMeta社が開発した言語生成AI(LLM)で、OpenAI社のChatGPTに匹敵するの性能を持っています。


Llama2の特徴としては、軽量モデルで高性能、そして無料で使えるオープンソースであるため、開発者にとって扱いやすいモデルになっています。

llama2


Llama2の詳細については、以下の記事で解説しています。


  Llama2とは?使い方・日本語性能・商用利用について解説 | 初心者ガイド この記事では、Llama2について幅広く解説しています。Llama2の性能や安全性、商用利用、日本語対応、様々な環境での使い方などに触れています。 業界最安級GPUクラウド | GPUSOROBAN


Llama2の日本語学習済みモデル「ELYZA-japanese-Llama-2」

「ELYZA-japanese-Llama-2」は、Llama2をベースにELYZA社が追加事前学習を行った日本語LLMです。

パラメータ数は70億と130億のモデルがあり、いずれも商用利用も可能です。このモデルはGPT-3.5に匹敵する性能を持ち、日本語の公開モデルの中で最高水準とされています。


元のLlama 2の事前学習では、日本語はわずか0.1%(20億トークン)しか含まれていないため、追加で180億トークンの日本語データを事前学習させています。

学習に用いたのはOSCARやWikipedia等に含まれる日本語テキストデータです。


商用利用が可能

ELYZA-japanese-Llama-2のライセンスはLLAMA 2 Community Licenseに準拠しており、Acceptable Use Policy に従う限り、研究および商業目的で利用できます。


日本語LLMで最高水準

ELYZA-japanese-Llama-2-7bのモデルは、70億のパラメータを持ち、公開されている日本語のLLMとしては最大級の規模になります。


ELYZA Tasks 100という日本語LLMの性能評価においても、ELYZA-japanese-Llama-2-7bはオープンな日本語LLMのなかでは最高水準の評価がされています。

llama-elyza

ELYZA Tasks 100による日本語LLMの性能評価比較
参考:https://note.com/elyza/n/na405acaca130


モデルのバリエーション

ELYZA-japanese-Llama-2のモデルには複数のバリエーションがあります。

ユーザーの指示に従い様々なタスクを解くために事後学習を行った「instruct」や、日本語の語彙を追加することで入出力できる文章量の改善および推論を高速化したモデルの「fast」、それらを組み合わせた「fast-instruct」があります。

model_id

モデルの説明

elyza/ELYZA-japanese-Llama-2-(7b or 13b)

Llama2に約180億トークンの日本語テキストで追加事前学習を行ったモデル

elyza/ELYZA-japanese-Llama-2-(7b or 13b)-fast-instruct

「ELYZA-japanese-Llama-2-(7b or 13b)」に対して事後学習を行ったモデル。

ユーザーの指示に従い多様なタスクを解くことができる。

elyza/ELYZA-japanese-Llama-2-(7b or 13b)-fast

Llama 2に日本語の語彙を追加して事前学習を行ったモデル。

入出力できる文章量の効率化および推論の高速化がされている

elyza/ELYZA-japanese-Llama-2-(7b or 13b)-fast-instruct

「ELYZA-japanese-Llama-2-(7b or 13b)-fast」に対して事後学習を行ったモデル。に対して事後学習を行ったモデル。

「fast」と「instruct」の組み合わせ。


モデルを動かすにはGPUが必要

ELYZA-japanese-Llama-2などのLLMを使用する際には、大量の計算を行うためにGPUが必要です。

ELYZA-japanese-Llama-2において推論を実行する際の「GPUメモリ使用量」、「ストレージ使用量」、「使用したGPU」について、各モデルごとにまとめています。

モデルのサイズが大きくなると、より大きなGPUメモリ(VRAM)とストレージ容量が必要になることが分かります。

model_id

GPUメモリ(VRAM)使用量

ストレージ使用量

使用したGPU

elyza/ELYZA-japanese-Llama-2-7b

15.7GB

13GB

NVIDIA A100 80GB x 1

elyza/ELYZA-japanese-Llama-2-7b-instruct

15.7GB

13GB

NVIDIA A100 80GB x 1

elyza/ELYZA-japanese-Llama-2-7b-fast

15.9GB

13GB

NVIDIA A100 80GB x 1

elyza/ELYZA-japanese-Llama-2-7b-fast-instruct

15.9GB

13GB

NVIDIA A100 80GB x 1

elyza/ELYZA-japanese-Llama-2-13b

27.1GB

25GB

NVIDIA A100 80GB x 1

elyza/ELYZA-japanese-Llama-2-13b-instruct

27.1GB

25GB

NVIDIA A100 80GB x 1

elyza/ELYZA-japanese-Llama-2-13b-fast

27.4GB

25GB

NVIDIA A100 80GB x 1

elyza/ELYZA-japanese-Llama-2-13b-fast-instruct

27.4GB

25GB

NVIDIA A100 80GB x 1


実行環境

この記事ではGPUクラウドサービス(GPUSOROBAN)を使用しました。

  • インスタンス名:t80-1-a-exlarge-ubs22-i
  • GPU:NVIDIA A100 80GB x 1
  • OS :Ubuntu 22.04
  • CUDA:11.7
  • Jupyter Lab


GPUSOROBANはメガクラウドの50%以上安いGPUクラウドサービスです。

GPUSOROBANの使い方は以下の記事で解説しています。


  会員登録~インスタンス接続手順 | GPUSOROBAN GPUSOROBANの会員登録からインスタンス作成・接続までの手順を詳しく解説する記事です。会員登録、電話番号認証、SSHキー作成、インスタンスの作成、キーの設置、ターミナルからのインスタンス接続までの流れを説明しています。 業界最安級GPUクラウド | GPUSOROBAN


Jupyter Labを起動

GPUSOROBANのインスタンスに接続したら、次のコマンドを実行しJupyter Labを起動します。

jupyter lab --ip='*' --port=8888 --NotebookApp.token='' --NotebookApp.password='' --no-browser

llama-elyza


ブラウザの検索窓に"localhost:8888"を入力すると、Jupyter Labをブラウザで表示できます。

localhost:8888


Jupyter Labのホーム画面で[Python3 ipykernel]を選択し、Notebookを開きます。

llama-elyza


Jupyter Labの使い方が分からない方は、以下の記事が参考になります。


プリインストールされたJupyter Labを使用する場合は、以下の記事をご覧ください。

  プリインストールの利用方法(Docker、PyTorch、TensorFlow、JupyterLab)| GPUSOROBAN GPUSOROBAN高速コンピューティングのプリインストールの利用方法を説明しています。PyTorchやTensosrFlow、JupyterLabがプリインストールされたインスタンスを使うことで環境構築にかかる時間を削減できます。 業界最安級GPUクラウド | GPUSOROBAN


Jupyter Labを新しくインストールして使う場合、以下の記事をご覧ください。


  Jupyter Labのインストール(Ubuntu)| GPUSOROBAN GPUSOROBANのUbuntuインスタンスにJupyter Labをインストールする方法を紹介しています。高性能なGPUインスタンスを利用したクラウドサービスGPUSOROBANでJupyter Labを動作させることが可能です。 業界最安級GPUクラウド | GPUSOROBAN


必要なパッケージのインストール

JupyterLabのNotebookのコードセルで次のコマンドを実行し、必要なパッケージをインストールします。

pip install transformers

llama-elyza


次のコマンドを実行し、ライブラリをインポートします。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer


モデルとトークナイザーを読み込む関数

HuggingFaceのTransformersを使用して、事前学習済みモデルおよびトークナイザーの関数を定義します。

トークナイザーはテキストをモデルが理解できる形式に変換する機能です。

def load_model(model_id):
    tokenizer = AutoTokenizer.from_pretrained(model_id)
    model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="auto")
    if torch.cuda.is_available():
        model = model.to("cuda")
    return model, tokenizer


モデル・トークナイザーを読み込む

モデルとトークナイザーを読み込みます。
モデルを変更する場合は、model_idを差し替えてください。
この段階でモデルがGPUメモリにロードされますので、しばらく時間がかかります。

model_id = "elyza/ELYZA-japanese-Llama-2-7b-fast-instruct"
model, tokenizer = load_model(model_id)
model_id
GPUメモリ(VRAM)使用量
ストレージ使用量
使用したGPU
elyza/ELYZA-japanese-Llama-2-7b
15.7GB
13GB
NVIDIA A100 80GB x 1
elyza/ELYZA-japanese-Llama-2-7b-instruct
15.7GB
13GB
NVIDIA A100 80GB x 1
elyza/ELYZA-japanese-Llama-2-7b-fast
15.9GB
13GB
NVIDIA A100 80GB x 1
elyza/ELYZA-japanese-Llama-2-7b-fast-instruct
15.9GB
13GB
NVIDIA A100 80GB x 1
elyza/ELYZA-japanese-Llama-2-13b
27.1GB
25GB
NVIDIA A100 80GB x 1
elyza/ELYZA-japanese-Llama-2-13b-instruct
27.1GB
25GB
NVIDIA A100 80GB x 1
elyza/ELYZA-japanese-Llama-2-13b-fast
27.4GB
25GB
NVIDIA A100 80GB x 1
elyza/ELYZA-japanese-Llama-2-13b-fast-instruct
27.4GB
25GB
NVIDIA A100 80GB x 1


モデルを使用してテキストを生成する関数

モデルとトークナイザーを活用して、与えられたプロンプトからテキストを生成する関数を定義します。B_INSTとE_INSTはプロンプトの開始と終了を示し、B_SYSとE_SYSは生成されたテキストの開始と終了を指します。

また、max_new_tokens=300は生成されるテキストの最大トークン数を指定しており、必要に応じて変更できます。

def generate_text(model, tokenizer, default_system_prompt,text):
    B_INST, E_INST = "[INST]", "[/INST]"
    B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
    prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst} ".format(
        bos_token=tokenizer.bos_token,
        b_inst=B_INST,
        system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
        prompt=text,
        e_inst=E_INST)

    with torch.no_grad():
        token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
    
        output_ids = model.generate(
            token_ids.to(model.device),
            max_new_tokens=300,
            pad_token_id=tokenizer.pad_token_id,
            eos_token_id=tokenizer.eos_token_id,
repetition_penalty=1.1
        )


    output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1):], skip_special_tokens=True)
    return output


生成タスク1

日本語でモデルに質問をして、生成するタスクを実行してみます。

プロンプト

DEFAULT_SYSTEM_PROMPT = "あなたは日本に詳しいアドバイザーです。"
text = """
伊勢神宮を参拝する際に、外宮と内宮どのルートで参拝することをおすすめしますか?
"""
generated_text = generate_text(model, tokenizer, default_system_prompt, text)
print(generated_text)


生成結果

伊勢神宮の外宮と内宮は離れているため、公共交通機関を利用して周るのが一般的です。その場合、外宮から内宮に向かい、順路に沿って巡ると良いとされています。ただし、お参りの回数やご自身の好みによって、ルートは異なります。


生成タスク2

プロンプト

DEFAULT_SYSTEM_PROMPT = "あなたは日本に詳しいアドバイザーです。"
text = """
私はアメリカ人出身で日本に留学できています。
居酒屋でお通しという食事が出されました。
これは何でしょうか?
"""
generated_text = generate_text(model, tokenizer, DEFAULT_SYSTEM_PROMPT, text)
print(generated_text)


生成結果

お通しとは、飲食店で料理を待つ間に食べる小鉢のことです。居酒屋においてはお通しとして出されることもあれば、無料のおつまみとして出されることもあります。


生成タスク3

プロンプト

DEFAULT_SYSTEM_PROMPT = "あなたは日本に詳しいアドバイザーです。"
text = """
大阪の観光スポットを教えてください。
"""
generated_text = generate_text(model, tokenizer, DEFAULT_SYSTEM_PROMPT, text)
print(generated_text)


生成結果

もちろん!大阪のおすすめ観光スポットを紹介します。

USJ: ユニバーサル・スタジオ・ジャパンは、世界中に数あるユニバーサル・スタジオの1つであり、ハリウッド映画や人気キャラクターを中心としたアトラクションが魅力的です。
グランフロント大阪: グランフロント大阪は、通天閣やグッディバレーなど大阪市の主要な観光名所と直結しており、ショッピングやグルメ、エンターテイメントを楽しむことができます。
天王寺動物園: 天王寺動物園は、大阪市内唯一の動物園であり、キリンやカピバラなどの珍しい動物たちを見ることができます。
通天閣: 通天閣は、大阪を代表するランドマークで、夜にはライトアップされるため幻想的な雰囲気を味わうことができます。


生成タスク4

プロンプト

DEFAULT_SYSTEM_PROMPT = "あなたは日本に詳しいアドバイザーです。"
text = """
なぜ日本では電線が地下ではなく電柱に配置されているのですか?
"""
generated_text = generate_text(model, tokenizer, DEFAULT_SYSTEM_PROMPT, text)
print(generated_text)


生成結果

日本の都市部においては、電柱を建てないために様々な工夫がされていますが、元々の理由は第二次世界大戦後の電力需要の急増によるものです。
戦前、東京や大阪などの大都会には路面電車が走っていましたが、これらの都市でも道路は狭く、電線が地中化されていたとしても新たな道路を作るよりも、既にある道路の上に電線を架線する方が安価で済んだため、この方法が採用されました。
その後、戦後行われた電力需要の急増に対応するため、更に多くの電線が必要となり、その際にも架線式の方が地中線より安価であることから、現在の状態が続いているのです。


LLMならGPUクラウド

Llama2やその他のLLMを使用する際には、モデルサイズやタスクに応じて必要なスペックが異なります。

LLMで使用されるGPUは高価なため、買い切りのオンプレミスよりも、コストパフォーマンスが高く柔軟な使い方ができるGPUクラウドをおすすめしています。

GPUクラウドのメリットは以下の通りです。

  • 必要なときだけ利用して、コストを最小限に抑えられる
  • タスクに応じてGPUサーバーを変更できる
  • 需要に応じてGPUサーバーを増減できる
  • 簡単に環境構築ができ、すぐに開発をスタートできる
  • 新しいGPUを利用できるため、陳腐化による買い替えが不要
  • GPUサーバーの高電力・熱管理が不要


コスパをお求めなら、メガクラウドと比較して50%以上安いGPUクラウドサービス「GPUSOROBAN」がおすすめです。

  生成AIに最適なGPUクラウド「高速コンピューティング」|GPUSOROBAN GPUSOROBANの高速コンピューティングは、NVIDIAの高速GPUが業界最安級で使えるクラウドサービスです。NVIDIA A100を始めする高速GPUにより、画像生成AI、大規模言語モデルLLM、機械学習、シミュレーションを高速化します。 業界最安級GPUクラウド | GPUSOROBAN


まとめ

本記事では、ELYZA-japanese-Llama-2を用いてテキスト生成を行いました。
このモデルは、Llama2において日本語追加学習を施したものであり、その生成結果も自然な日本語が得られました。

ELYZA社は現在、パラメータ数7B(70億)と13B(130億)までのモデルを公開していますが、70B(700億)のモデルも開発中であり、今後の展望が期待されます。


Llama2に関する使い方(まとめ)は、以下の記事で解説していますので、あわせてご覧ください。


  Llama2とは?使い方・日本語性能・商用利用について解説 | 初心者ガイド この記事では、Llama2について幅広く解説しています。Llama2の性能や安全性、商用利用、日本語対応、様々な環境での使い方などに触れています。 業界最安級GPUクラウド | GPUSOROBAN



MORE INFORMATION

GPUでお困りの方はGPUSOROBANで解決!
お気軽にご相談ください

10日間無料トライアル
詳しい資料はこちら
質問・相談はこちら