【Llama2】コード生成Code Llamaの使い方 | 7B・13B・34B・70B
この記事では、Code Llamaによるコード生成をする方法(推論)について紹介しています。
目次[非表示]
Llama2とは
Llama2(ラマツー)とは、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モデル)
自然言語のプロンプト(命令)からコードを生成してくれます。
Code Llamaのモデル一覧
ベースモデルの「Code Llama」、Pythonに特化した「Code Llama-Python」、命令タスクに特化した「Code Llama - Instruct」の3種類あり、それぞれ異なるパラメータ数の7B(70億)、13B(130億)、34B(340億)、70b(700億)が用意されています。
モデル名 |
特徴 |
GPUメモリ(VRAM)使用量 |
ストレージ使用量 |
使用したGPU |
CodeLlama-7b-hf |
ベースモデル、70億パラメータ |
6.1GB |
13GB |
NVIDIA A4000 16GB x 1 |
CodeLlama-13b-hf |
ベースモデル、130億パラメータ |
9.8GB |
25GB |
NVIDIA A4000 16GB x 1 |
CodeLlama-34b-hf |
ベースモデル、340億パラメータ |
21.7GB |
63GB |
NVIDIA A100 80GB x 1 |
CodeLlama-70b-hf |
ベースモデル、700億パラメータ |
35.8GB |
130GB |
NVDIA A100 |
CodeLlama-7b-Python-hf |
Python特化 、70億パラメータ |
6.1GB |
13GB |
NVIDIA A4000 16GB x 1 |
CodeLlama-13b-Python-hf |
Python特化 、130億パラメータ |
9.7GB |
25GB |
NVIDIA A4000 16GB x 1 |
CodeLlama-34b-Python-hf |
Python特化 、340億パラメータ |
21.7GB |
63GB |
NVIDIA A100 80GB x 1 |
CodeLlama-70b-Python-hf |
Python特化 、700億パラメータ |
35.1GB |
130GB |
NVIDIA A100 |
CodeLlama-7b-Instruct-hf |
命令タスク、70億パラメータ |
6.1GB |
13GB |
NVIDIA A4000 16GB x 1 |
CodeLlama-13b-Instruct-hf |
命令タスク、130億パラメータ |
9.6GB |
25GB |
NVIDIA A4000 16GB x 1 |
CodeLlama-34b-Instruct-hf |
命令タスク、340億パラメータ |
21.7GB |
63GB |
NVIDIA A100 80GB x 1 |
CodeLlama-70b-Instruct-hf |
命令タスク、700億パラメータ |
36.9GB |
130GB |
NVIDIA A100 80GB x 1 |
上記のGPUメモリは、モデルを4bit量子化して精度を低下させる代わりに、モデルサイズを軽量化した場合のものです。
HuggingFaceの記事によるとファインチューニングなどでモデル量子化を使用しない場合は、パラメータ数に応じて以下のGPUメモリが必要になります。
パラメータ数 |
GPUメモリ(VRAM) |
ロードする精度 |
7b(70億パラメータ)のモデル |
14GB |
bfloat16 |
13b(130億パラメータ)のモデル |
26GB |
bfloat16 |
34b(340億パラメータ)のモデル |
68GB |
bfloat16 |
70b(700億パラメータ)のモデル |
140GB |
bfloat16 |
またGithubでは、パラメータが大きいモデルではマルチGPUを推奨しています。
- 13BパラメータのモデルでGPU x 2(=MP2)
- 34BパラメータのモデルでGPU x 4(=MP4)
- 70BパラメータのモデルでGPU x 8 (=MP8)
Metaへのモデル利用申請とHuggingFaceの設定
Llama2を利用する前に、Meta社へのモデル利用の申請とHuggingFaceの設定の準備を行います。
設定が完了したら、HuggingFaceのアクセストークンを後で使いますので、メモしておきます。
Metaへのモデル利用申請・HuggingFaceの設定方法について、以下の記事で詳しく解説しています。
※Code Llamaの場合はHuggingFaceでのモデルの利用申請は必要ありません
実行環境
この記事では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というライブラリを使用してモデルの準備をします。
HuggingFaceで利用申請したLlamaのモデルを読み込みます。
この記事ではCodeLlama-34b-Instruct-hfのパラメータ34bのチャットモデルを使用していますが、他のモデルを使いたい場合は表を参考に適宜model_idを変更してください。
モデル名 |
特徴 |
GPUメモリ(VRAM)使用量 ※4bit量子化を設定 |
ストレージ使用量 |
使用したGPU |
CodeLlama-7b-hf |
ベースモデル、70億パラメータ |
6.1GB |
13GB |
NVIDIA A4000 16GB x 1 |
CodeLlama-13b-hf |
ベースモデル、130億パラメータ |
9.8GB |
25GB |
NVIDIA A4000 16GB x 1 |
CodeLlama-34b-hf |
ベースモデル、340億パラメータ |
21.7GB |
63GB |
NVIDIA A100 80GB x 1 |
CodeLlama-70b-hf |
ベースモデル、700億パラメータ |
35.8GB |
130GB |
NVDIA A100
80GB x 1
|
CodeLlama-7b-Python-hf |
Python特化 、70億パラメータ |
6.1GB |
13GB |
NVIDIA A4000 16GB x 1 |
CodeLlama-13b-Python-hf |
Python特化 、130億パラメータ |
9.7GB |
25GB |
NVIDIA A4000 16GB x 1 |
CodeLlama-34b-Python-hf |
Python特化 、340億パラメータ |
21.7GB |
63GB |
NVIDIA A100 80GB x 1 |
CodeLlama-70b-Python-hf |
Python特化 、700億パラメータ |
35.1GB |
130GB |
NVIDIA A100
80GB x 1
|
CodeLlama-7b-Instruct-hf |
命令タスク、70億パラメータ |
6.1GB |
13GB |
NVIDIA A4000 16GB x 1 |
CodeLlama-13b-Instruct-hf |
命令タスク、130億パラメータ |
9.6GB |
25GB |
NVIDIA A4000 16GB x 1 |
CodeLlama-34b-Instruct-hf |
命令タスク、340億パラメータ |
21.7GB |
63GB |
NVIDIA A100 80GB x 1 |
CodeLlama-70b-Instruct-hf |
命令タスク、700億パラメータ |
36.9GB |
130GB |
NVIDIA A100 80GB x 1 |
モデルの量子化
モデルの量子化の設定を行います。
量子化は、モデルのパラメータや活性化関数などを低bitに変換する技術で、モデルサイズを小さくすることができGPUメモリの使用量を節約できます。
モデルとトークナイザーの読み込み
モデルの設定情報を読み込みます。
この記事では、モデルのパラメータを4bitでロードするように設定し、4bitの計算に使用されるデータ型を float16 に設定しています。
モデルを読み込みます。初回はモデルをダウンロードするため時間がかかりますが、
2回目以降はモデルの読み込みのみになりますので、すぐに完了します。
モデルに対応したトークナイザーを読み込みます。
transformers ライブラリの pipeline 関数を使用して、テキスト生成のためのパイプラインを構築します。
コード補完のタスク(Code Completion)
promptに、機械学習モデルのトレーニングを実行するためのコードを途中まで記述して、続きのコード補完を生成してみます。
max_lengthで生成するトークン数を調整できます。
入力したプロンプト
生成結果
生成結果では、コードの続きをうまく補完できています。
コードの穴埋めタスク(Code Infilling)
sklearnのコード途中を<FILL_ME>でブランクして、穴埋めをするタスクを実行してみます。
入力したプロンプト
生成結果
生成結果では適切に穴埋めができています。
命令タスク(Instructモデル)
Pythonのbeautiful Soupを使ったスクレイピングのコードを生成するプロンプトを入力してコードを生成します。
入力したプロンプト
生成結果
生成結果では、適切にBeautifuSoupの記述ができています。
生成AI・LLMならGPUクラウド
Llama2やその他のLLMを使用する際には、モデルサイズやタスクに応じて必要なスペックが異なります。
LLMで使用されるGPUは高価なため、買い切りのオンプレミスよりも、コストパフォーマンスが高く柔軟な使い方ができるGPUクラウドをおすすめしています。
GPUクラウドのメリットは以下の通りです。
- 必要なときだけ利用して、コストを最小限に抑えられる
- タスクに応じてGPUサーバーを変更できる
- 需要に応じてGPUサーバーを増減できる
- 簡単に環境構築ができ、すぐに開発をスタートできる
- 新しいGPUを利用できるため、陳腐化による買い替えが不要
- GPUサーバーの高電力や熱を管理をするための設備投資が不要
コスパをお求めなら、メガクラウドと比較して50%以上安いGPUクラウドサービス「GPUSOROBAN 高速コンピューティング」がおすすめです。
大規模なLLMを計算する場合は、NVIDIA H100のクラスタが使える「GPUSOROBAN AIスパコンクラウド」がおすすめです。
まとめ
この記事では、プログラム生成に特化したCode Llamaでコード生成をする方法を紹介しました。
Llama2は無料で使えて商用利用可能な利便性の高いモデルでありながら、ChatGPTと同等以上の性能があります。
Llama2に関する詳細な情報は、以下の記事でまとめて紹介していますので、あわせてご覧ください。