3xGPUでjapanese-stablelm-instruct-gamma-70b-q4_K_M.ggufを動かす
けじめとして簡単にまとめます。3xGPUでjapanese-stablelm-instruct-gamma-70b-q4_K_M.ggufを動かした記録です。
物理形状がx16なPCIeをもつマザーボードにGPUを3基搭載して巨大なモデルであるjapanese-stablelm-instruct-gamma-70bを試しました。
動いたGPUの組み合わせ
4060ti-16Gだけで動かそうとしましたが、生成出力が異常になりできませんでした。
A4000-16G+4060ti-16G+3060-12G
VRAMの合計は44Gになります。llama.cpp(llama-cpp-python)で確認。
環境はこちら
テストコード
layerは83あります。
n_gpu_layers=83
他はこれまでと同じで動きます。
from llama_cpp import Llama
# LLMの準備
#llm = Llama(model_path="./models/japanese-stablelm-instruct-gamma-7b-q8_0.gguf", n_gpu_layers=35,n_ctx=2048)
#llm = Llama(model_path="./models/japanese-stablelm-instruct-gamma-7b-q4_K_M.gguf", n_gpu_layers=35,n_ctx=2048)
#llm = Llama(model_path="./models/japanese-stablelm-instruct-beta-70b.Q2_K.gguf", n_gpu_layers=83,n_ctx=2048)
llm = Llama(model_path="./models/japanese-stablelm-instruct-beta-70b.Q4_K_M.gguf", n_gpu_layers=83,n_ctx=2048)
sys_msg="以下は、文脈のある入力と指示に基づいた会話です。入力の要求を適切に満たす応答を書きなさい。\
1回の入力に対して何度も応答してはいけません。語尾は「です。」や「ます。」や「ください。」は使ってはいけません。30文字で答えること。"
user_query="女子高校生のめぐを演じるんだ。\
めぐは賢くて、おちゃめで、少しボーイッシュ、天真爛漫で好奇心旺盛な女子高生だよ。品川区の目黒川の近くで生まれたんだ。\
いつもタメ口で話すし、自分のことをめぐと言うんだ。\
質問に応答えるときもあれば、聞かれたことに対して適当な言葉や文章で応答をすることもるね。\
応答の長さは最大でも30字以内だし、応答は1ターンだけで答えるんだ。めぐはおちゃめなので時々文脈と関係のない応答をするよ。\
応答は、ちょっと背伸びした感じで、ため口で相手にツッコミを入れるんだ。\
めぐのよく使う語尾は、だよね、みたいだ、そうなんだ、違うと思うけどね、だれ?、どこ?。\
めぐは語尾に「です。」や「ます。」、「ください。」は使いません。\
「だよ。」とか「だよね。」や「だと思うよ。」はよく使います。\
丁寧語も絶対に使ってはいけません。"
#user="五反田で美味しいお店を教えて。"
user="お好み焼きの作り方教えて"
prompt =sys_msg+"\n\n" + "### 指示: "+"\n" + user_query + "\n\n" + "### 入力:" +"\n"+ user + "\n\n" + "### 応答:"
# 推論の実行
output = llm(
prompt,
max_tokens=300,
temperature=0.7,
top_k=40,
stop=['"### 入力"'],
echo=True,
)
#output の"### 応答:"のあとに、"###"がない場合もあるので、ない場合は最初の"### 応答:"を選択
try:
ans = ans=output["choices"][0]["text"].split("### 応答:")[1].split("###")[0]
except:
ans = output["choices"][0]["text"].split("### 応答:")[1]
print("final ans",ans)
起動はとても時間がかかります。モデルの読み込みに時間がかかります。
生成速度は普通です。精度などは70Bの優位性を感じるところまではテストしていません。
GPUの利用状況
実行結果サマリー
7.46token/secなので遅くはないです。