【Llama2】Code Llamaの日本語モデル | ELYZA-japanese-CodeLlama-7b
この記事では、Code Llamaの日本語学習済みモデル「ELYZA-japanese-CodeLlama-7b」の使い方について解説しています。
目次[非表示]
- 1.Llama2とは
- 2.Code Llamaとは
- 3.日本語学習済みモデル「ELYZA-japanese-CodeLlama-7b」
- 4.商用利用が可能
- 5.モデル一覧
- 6.モデルを動かすにはGPUが必要
- 7.実行環境
- 8.Jupyter Labを起動
- 9.ライブラリのインストール
- 10.モデルとトークナイザーを読み込む関数
- 11.モデル・トークナイザーを読み込む
- 12.モデルを使用してテキストを生成する関数
- 13.生成タスク1
- 14.生成タスク2
- 15.生成タスク3
- 16.生成タスク4
- 17.生成タスク5
- 18.生成タスク6
- 19.LLMならGPUクラウド
- 20.まとめ
Llama2とは
Llama2(Large Language Model Meta AI 2/ラマツー)とは、Facebookを運営するMeta社が開発した言語生成AI(LLM)で、OpenAI社のChatGPTに匹敵するの性能を持っています。
Llama2の特徴としては、軽量モデルで高性能、そして無料で使えるオープンソースであるため、開発者にとって扱いやすいモデルになっています。
Llama2の詳細については、以下の記事で解説しています。
Code Llamaとは
Code LlamaはMetaが既に公開している言語モデルの「Llama 2」をベースに、プログラムコードの自動生成に特化させたモデルです。
Llama 2モデルをベースに、500Bトークン(=5000億トークン)のプログラムに特化させた学習データを使っています。
Code Llamaでできることは3つあります。
- コード補完のタスク(Code Completion)
途中まで書いたプログラムの続きをCode Llamaが完成させてくれます。
- コードの穴埋めタスク(Code Infilling)
Code Llamaがコードの途中の穴埋めをしてくれます。
- 命令タスク(Instructモデル)
自然言語のプロンプト(命令)からコードを生成してくれます
日本語学習済みモデル「ELYZA-japanese-CodeLlama-7b」
「ELYZA-japanese-CodeLlama-7b」は、Code LlamaをベースにELYZA社が追加事前学習を行った日本語LLMです。
パラメータ数は70億であり商用利用も可能です。Code LlamaをベースとしたファインチューニングモデルがGPT-3.5-turboやGPTに匹敵する性能を持つと言われています。
元のLlama 2の事前学習では、日本語はわずか0.1%(20億トークン)しか含まれていないため、追加で180億トークンの日本語データを事前学習させています。学習に用いたのはOSCARやWikipedia等に含まれる日本語テキストデータです。
商用利用が可能
ELYZA-japanese-CodeLlama-7bのライセンスはLLAMA 2 Community Licenseに準拠しており、Acceptable Use Policy に従う限り、研究および商業目的で利用できます。
モデル一覧
ELYZA-japanese-CodeLlama-7bのモデルには複数のバリエーションがあります。
ベースモデルの他に、ユーザーの指示に従い様々なタスクを解くために事後学習を行った「instruct」のモデルがあります。
model_id |
モデルの説明 |
elyza/ELYZA-japanese-CodeLlama-7b |
Llama2に約180億トークンの日本語テキストで追加事前学習を行ったモデル。 |
elyza/ELYZA-japanese-CodeLlama-7b-instruct |
「elyza/ELYZA-japanese-CodeLlama-7b」に対して事後学習を行ったモデル。ユーザーの指示に従い多様なタスクを解くことができる。 |
モデルを動かすにはGPUが必要
ELYZA-japanese-CodeLlama-7bなどのLLMを使用する際には、大量の計算を行うためにGPUが必要です。
ELYZA-japanese-Llama-2において推論を実行する際の「GPUメモリ使用量」、「ストレージ使用量」、「使用したGPU」について、各モデルごとにまとめています。
model_id |
GPUメモリ(VRAM)使用量 |
ストレージ使用量 |
使用したGPU |
elyza/ELYZA-japanese-CodeLlama-7b |
15.7GB |
13GB |
NVIDIA A100 80GB x 1 |
elyza/ELYZA-japanese-CodeLlama-7b-instruct |
15.7GB |
13GB |
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の使い方は以下の記事で解説しています。
Jupyter Labを起動
GPUSOROBANのインスタンスに接続したら、次のコマンドを実行しJupyter Labを起動します。
ブラウザの検索窓にlocalhost:8888を入力すると、Jupyter Labをブラウザで表示できます。
Jupyter Labのホーム画面で[Python3 ipykernel]を選択し、Notebookを開きます。
Jupyter Labの使い方が分からない方は、以下の記事が参考になります。
プリインストールされたJupyter Labを使用する場合は以下の記事をご覧ください。
Jupyter Labを新しくインストールして使う場合は以下の記事をご覧ください。
ライブラリのインストール
Jupyterのコードセルで以下のコマンドを実行し、必要なライブラリをインストールします。
必要なライブラリをインポートします。
モデルとトークナイザーを読み込む関数
HuggingFaceのTransformersを使用して、事前学習済みモデルおよびトークナイザーの関数を定義します。
トークナイザーはテキストをモデルが理解できる形式に変換する機能です。
モデル・トークナイザーを読み込む
モデルとトークナイザーを読み込みます。
モデルを変更する場合は、model_idを差し替えてください。
この段階でモデルがGPUメモリにロードされますので、しばらく時間がかかります。
モデルを使用してテキストを生成する関数
モデルとトークナイザーを活用して、与えられたプロンプトからテキストを生成する関数を定義します。
B_INSTとE_INSTはプロンプトの開始と終了を示し、B_SYSとE_SYSは生成されたテキストの開始と終了を指します。
また、max_new_tokens=300は生成されるテキストの最大トークン数を指定しており、必要に応じて変更できます。
生成タスク1
プロンプト
生成結果
生成タスク2
プロンプト
生成結果
生成タスク3
プロンプト
生成結果
生成タスク4
プロンプト
生成結果
生成タスク5
プロンプト
生成結果
生成タスク6
プロンプト
生成結果
LLMならGPUクラウド
Llama2やその他のLLMを使用する際には、モデルサイズやタスクに応じて必要なスペックが異なります。
LLMで使用されるGPUは高価なため、買い切りのオンプレミスよりも、コストパフォーマンスが高く柔軟な使い方ができるGPUクラウドをおすすめしています。
GPUクラウドのメリットは以下の通りです。
- 必要なときだけ利用して、コストを最小限に抑えられる
- タスクに応じてGPUサーバーを変更できる
- 需要に応じてGPUサーバーを増減できる
- 簡単に環境構築ができ、すぐに開発をスタートできる
- 新しいGPUを利用できるため、陳腐化による買い替えが不要
- GPUサーバーの高電力・熱管理が不要
コスパをお求めなら、メガクラウドと比較して50%以上安いGPUクラウドサービス「GPUSOROBAN」がおすすめです。
大規模なLLMを計算する場合は、NVIDIA H100のクラスタが使える「GPUSOROBAN AIスパコンクラウド」がおすすめです。
まとめ
この記事では、プログラム生成に特化したCode Llamaの日本語モデル「ELYZA-japanese-CodeLlama-7b」でコード生成をする方法を紹介しました。
Llama2は無料で使えて商用利用可能な利便性の高いモデルでありながら、ChatGPTと同等以上の性能があります。
Llama2に関する詳細な情報は、以下の記事でまとめて紹介していますので、あわせてご覧ください。