📖

Hugging FaceにあるLlama3を動かしてみた

2024/04/28に公開

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へは以下からアクセスできます。
https://huggingface.co/

こちらは、よくある会員登録ですので、通常どおり行ってください。
会員登録したら、ログインを行ってください。

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、会社経営のノウハウについて発信しています。もし興味があれば、フォローしていただけると嬉しいです。

プログラミング学習サポート&キャリア相談について

プログラミング学習サポート&キャリア相談も始めました。興味のある方はこちらから詳細をご覧ください。
https://shibayama-masaki.com/consulting/

Discussion