Llama 3をGroqとColabで試してみる
2024年4月18日、米Meta社がLLMのLlamaシリーズの最新モデルLlama 3を公開しました。
それを契機に、久しぶりにLLM関連を調べ、Llama 3自体を動かしたりしました。
自分のMacBook Pro(M1 Pro、16GB)ではローカルでLLMを動かすのは難しいので、クラウド環境で利用できるのものが中心です。
今回参考にさせて頂きました ↓。
Llama 3を高速動作させるGroq
複数のLLMを試せるGroqChat。
Llama 3を高速に動かせるという噂です(実際に早かったです。後述)。
8B(80億)と70B(70億)モデルなどが使えるチャットインタフェースを持つクラウドツールです。
ただ、プロンプトの履歴が残りません。
アシスタントとして使うのではなく、LLMの反応をちょっと試すためのツールのようです。
Groqの核はLPU(Language Processing Unit)という、独自開発のプロセッサです。
LLMを高速に処理することに特化しており、そのパフォーマンスをアピールするデモサイトとしてGroqChatが公開されているようです。
公式サイトには「Llama-2 70B をユーザーあたり 1 秒あたり 300 トークンを超える速度で実行」という記述がありました。
Googleアカウントでログイン
sign in to Groqから入ります。
Googleアカウントでも利用できます。
画面右上のドロップダウンメニューからLLMを選択します。
その隣の歯車アイコンでは、システムプロンプトを設定できます。
ここでLLMの役割を記述します。
例えば、日本語でやり取りをしたい場合、「日本語で回答するAIアシスタントです。必ず日本語で回答してください。」と記述します。
チャットの履歴は残らないようです。
ブラウザをリロードするとクリアされます。
レスポンスよく回答
以下のプロンプトを投げてみました。
LLMの進化により、今後どのような新しい仕事が生まれるでしょう。
また、その仕事にはどのようなスキルが必要とされるでしょうか。
理系職と文系職について2つずつ教えてください。
レスポンスは速いです。
7Bや8Bのモデルの場合、1秒も待たない感じでした。
以下、回答です。
各モデルの回答の内容は似た感じでした。
Llama 3以外も試し、各モデルのパフォーマンス結果を示します。
Llama3-8b-8192
返答欄の下の3本洗状のアイコンからは、文章のテーストを指定し直せます。
ただ、システムプロンプトが適用されず英語で返事が返ってきました。
「How are are you ?」と投げてProfesionalにすると「I am fully capable and proficient in my role as an AI assistant・・・」、Friendlyにすると「Hi there! I'm doing great・・・」という感じでした。
右側のスループット(トークン/秒)数字にマウスオーバーすると推論(inference)にかかった時間など、GroqChat & LLMのパフォーマンスが確認できます。
7Bや8Bで約300トークン/秒、70Bで約800トークン/秒程度でした。
Gemma-7b-It
Llama2-70b-4096
Llama3-70b-8192
Mixtral-8x7b-32768
Mixtral には合計 46.7B(467 億)のパラメータがありますが、トークンごとに使用するパラメータは 129 億。
12.9B モデルと同じ速度、同じコストで入力を処理し、出力を生成します(公式サイト参照)。
ColabでLlama 3
L4 GPUを使用します。
上記サイトによるとメモリは24Gバイト。
Hugging Faceのサイトのコードを使ってみます。
モデルを使用するには、Hugging FaceのサイトのModel Cardで利用許諾を取得しておきます。
# パッケージのインストール
!pip install -U transformers accelerate bitsandbytes
許諾を得られれば、Hugging Faceのサイトから取得できるトークンでログイン後にモデルを利用できるようになります。
# Googleのシークレットマネージャーに登録したAPIトークンを確認
from google.colab import userdata
userdata.get('HUGGING_TOKEN')
# HuggingFaceにトークンでログイン
!huggingface-cli login
Hugging Faceに記載のコードを実行して、モデルをダウンロードします。
# meta-llama/Meta-Llama-3-8B-Instruct
import transformers
import torch
model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
pipeline = transformers.pipeline(
"text-generation",
model=model_id,
model_kwargs={"torch_dtype": torch.bfloat16},
device_map="auto",
)
システムプロンプトとユーザープロンプトを設定し、回答を生成。
5秒程度かかりました。
messages = [
{"role": "system", "content": "あなたは日本語で回答するAIアシスタントです。日本語で返事をしてください。"},
{"role": "user", "content": "LLMの進化により、今後どのような新しい仕事が生まれるでしょう。また、その仕事にはどのようなスキルが必要とされるでしょうか。理系職と文系職について2つずつ教えてください。"},
]
# テキストがトークン化されずにそのままの形で処理
prompt = pipeline.tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
# terminatorsを指定することで、生成されたテキストが適切な長さで終了
terminators = [
pipeline.tokenizer.eos_token_id,
pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
# pipeline() 関数が呼び出され、与えられたプロンプトからテキストを生成
outputs = pipeline(
prompt,
max_new_tokens=768,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
# 元のプロンプトに続く生成されたテキスト部分のみを取得
print(outputs[0]["generated_text"][len(prompt):])
70Bはセッション切れ
70Bモデルも試しました。
model_id = "meta-llama/Meta-Llama-3-70B-Instruct"も使うが遅すぎる。
モデルのダウンロード中にランタイムのセッションが切れて、動かせませんでした。
下記はL4 GPUを使用し、ダウンロード処理中のリソースです。
この状態がしばらく続き、セッションが切れました。
ColabのA100 GPUで試そうとしましたが、割り当てられませんでした。
別の機会で試そうと思います。
##########
!pip install -U transformers accelerate bitsandbytes のケース
この記事が気に入ったらサポートをしてみませんか?