Hugging FaceにあるLlama3を動かしてみた
Llama3が公開されたということで、早速動かしてみました。
動かし方に少し苦戦したので、手順をまとめておきます。
Hugging Faceとは
Hugging Faceについてご存知のない方も多いと思うので、簡単に説明します。
Hugging Faceとは、簡単に言えば「機械学習のためのGithubのようなもの」です。
例えば以下のような情報が公開されています。
- 機械学習のモデルのソースコード
- モデルの学習に用いたデータセット
- モデルのパラメータ
今まではモデルを自前で作ろうという考え方だったのが、モデルをみんなで共有しようという考え方になり、ゼロからモデルを作るということはほとんどなくなりました。今回用いるLlama3も、このHugging Faceで公開されています。
Hugging FaceでLlama3を使うまでの手順
Hugging FaceでLlama3を使うためには、以下のような手順を踏みます。
今回は、Hugging Faceを全く使ったことがない前提で説明していきます。
- Hugging Faceへの会員登録
- Llama3へのレポジトリに対してアクセス申請
- トークンの発行
- ソースコードの記述
Hugging Faceへの会員登録
Hugging Faceへは以下からアクセスできます。
こちらは、よくある会員登録ですので、通常どおり行ってください。
会員登録したら、ログインを行ってください。
Llama3へのレポジトリに対してアクセス申請
まずはHugging FaceでLlama3を見つけてみましょう。
以下のキャプチャの赤枠部分のModelsをクリックすると、モデルの一覧が出てくるので、その中からLlama3が見つかるかと思います。
今回は、Meta-Llama-3-8Bという、80億個のパラメータを持ったモデルの方を選択します。
選択すると、以下のような画面になるかと思います。
画面をスクロールしていくと、入力フォームが出てくると思うので、そこに必要な項目を入力し、アクセス申請をしてください。しばらくすると、以下のようにアクセスが許可された旨のメールが届くと思います。
トークンの発行
申請が通ったら、次はトークンの発行です。
トークンは、以下の箇所からSettings→Access Tokensで発行できます。
ここで取得したトークンは、後ほどGoogle Colabでコードを書くときに用います。
ソースコードの記述
さて、いよいよコードを書いていきます。
今回はGoogle Colabを用います。
最初に、Google Colabのランタイム→ランタイムのタイプの設定から、GPUを選択しておいてください。
今回はGoogle Colab Pro+ で A100というGPUの環境を使用しました。8Bのモデルを動かすためにはGPUのRAMが20GBくらい必要なので、A100を用います。
これで、ソースコードを実行するときにCPUではなくGPUが使えるようになります。
まずは以下のコマンドをセルで実行してください。
!pip install transformers datasets
これで必要なライブラリのインストールができました。
次に、先ほど取得したアクセストークンの設定です。
以下のコマンドをセルで実行してください。(こちらを実行しないと、アクセスができません。)
!huggingface-cli login --token hf_xxxxxxxxxxxxxxxxxxxxxx
最後に、インストールしたライブラリを用いて以下のソースコードをセルで実行してください。
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="cuda",
)
messages = [
{"role": "system", "content": "あなたはプロの英会話講師です。"},
{"role": "user", "content": "「ここから市役所まではどれくらいの時間がかかりますか?」を英語で回答してください。"},
]
prompt = pipeline.tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
terminators = [
pipeline.tokenizer.eos_token_id,
pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = pipeline(
prompt,
max_new_tokens=256,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])
これで、Llama3を動かすことができました!
Xについて
僕のXアカウントでは、主にweb開発、AI、会社経営のノウハウについて発信しています。もし興味があれば、フォローしていただけると嬉しいです。
プログラミング学習サポート&キャリア相談について
プログラミング学習サポート&キャリア相談も始めました。興味のある方はこちらから詳細をご覧ください。
Discussion