【ローカルLLM】Colabの標準GPUで「CodeLlama-34B-GGUF」を動かす
Metaがコーディング用の言語モデル「Code Llama」をリリースした。
7月に公開済みのLlama-2をベースに、コーディングに特化した追加学習を行ったモデルだという。
コーディングには疎い人間だが、Llama-2では未公開だった34Bパラメータのモデルがラインナップされていたので、つい試したくなった。
例によってTheBloke氏の量子化モデルを使わせていただく。
結果的に、量子化した34BモデルがColabの標準GPU(T4、15GB VRAM)で動かせるかどうかを検証しただけ。
Google Colab(T4 GPU)で試す
TheBloke氏のアップする量子化モデルには「GPTQ」と「GGUF(旧GGML)」の2種類がある。
GPUのみで実行する場合は「GPTQ」の方が高速化できる。ただ一般的な4bitのGPTQだと、34Bのモデルなら17GBはあるので、Colabの標準GPU(15GB VRAM)には収まらない。ていうか、まだアップされてもない。
今回はCPU+GPUで実行できる「GGUF(旧GGML)」で試した。「CodeLlama-34B-Instruct-GGUF」の中から「Q4_K_M」のGGUFファイルを使う。
ランタイムを標準GPU(Tesla T4)に切り替えたうえで、Google Colabでダウンロード&実行してみた。
# llama.cppのインストール
!git clone https://github.com/ggerganov/llama.cpp
%cd llama.cpp
# cuBLASをオンにしてビルド(GPUオフロード)
!make LLAMA_CUBLAS=1
# 依存関係のインストール
!python3 -m pip install -r requirements.txt
# モデルのダウンロード(CodeLlama-34B-Instruct-GGUF)
%cd models
!wget https://huggingface.co/TheBloke/CodeLlama-34B-Instruct-GGUF/resolve/main/codellama-34b-instruct.Q4_K_M.gguf
# プロンプトを指定して実行
%cd /content/llama.cpp
!./main -m ./models/codellama-34b-instruct.Q4_K_M.gguf -p 'USER: What is the difference between inorder and preorder traversal? Give an example in Python.\nASSISTANT: ' -n 128 -ngl 35
「Q4_K_M」のGGUFファイルは20GBある。T4のVRAM 15GBに収まるように、GPUオフロードを調整する。
今回は「-ngl(--gpu-layers)」を35/51くらいに設定するとエラーなしで実行できた。GGUFの推論時のコマンドについてはこちらを参照。
上記のプロンプトフォーマットは適当。そのうちモデルカードに追記されるはず。
感想
GGUFであれば、34BモデルでもColabの標準GPUで動かせることが分かった。ただし速度は遅く、4bit量子化モデルは一応動くというレベル。
もとのLlama-2の34Bモデルは、公開が保留にされたまま音沙汰がない。
このCodeLlama-34Bを一般的なデータセットで再学習させると、34Bの汎用モデルとして使えたりするんだろうか?