PLaMo 3 の事前学習モデルを推論させてみる
先日PFNで開発しているPLaMo 3の事前学習モデルの小規模なモデルが公開されました。
https://huggingface.co/collections/pfnet/plamo-3
どのようなモデルなのかはPFNのブログのほうに書かれています。
簡単にPLaMo 3がどういうモデルか説明すると、PLaMo 2のときと同様、日本語のデータを大量にいれつつ、PLaMo 3では海外勢のLLMと差が大きかった学術的な部分の知識を増やすような取り組みをして、精度が上がったよというモデルになっています。
まだ、小規模モデルの検証段階のモデルが公開されているだけですが、最終的なモデルはもっとよくなる(はず)。
今回はPLaMo 2のとき少し面倒だった推論環境構築がPLaMo 3になったことで簡単になったので、2Bを使ってGoogle Colabで簡単に推論できる例を示そうと思います。
PLaMo 3は高速な推論が可能なvLLMでも簡単に動かせる仕組みが用意されているので、今回はhugging faceの仕組みを使った推論に加えて、vLLMによる推論の例も示します。
コードに関してはgithub上に置いてあります。コード全体を見たい方はこちらをご覧ください。
https://github.com/shu65/plamo-3-inference/blob/main/plamo_3_hf_inference_example.ipynb
https://github.com/shu65/plamo-3-inference/blob/main/plamo_3_vllm_inference_example.ipynb
注意点としては、事前学習を触ろうと思っている人ならご存じだと思いますが、精度が高いモデルでも事前学習モデルは結構めちゃくちゃなことを言います。このため、めちゃくちゃな推論結果でも事前学習モデルならそうだよね、という感じで流してもらえればと思います。ある程度指示を聞くようにするSFTのやり方も後日公開予定です。指示をちゃんと聞かせたいという方はそちらもご覧ください。
PLaMo 3を使うための事前準備
PLaMo 3はダウンロードする前にライセンスに承認が必要になります。今回例で示す、PLaMo 3の2Bモデルである「PLaMo 3 NICT 2B Base」だと初めてアクセスする場合は以下のような画面になっています。

こちらHugging Faceにログインし、ライセンスを確認のうえ、acceptをおしてください。
次にGoogle Colabで使うランタイムを変更します。
Google Colabでnotebookを開いたあと、右上の下矢印をクリックすると以下のようなメニューがでてきます。

このうち、「ランタイムのタイプを変更」をクリックしてください。するとこのようなポップアップが出てきます。

私の画面では有料のクレジットがある状態なので、T4以外にもL4が選択できるようになっていますが、無料の方は選択できないようになっていると思います。Hugging Faceのみの推論を試す場合は、無料で使えるT4で、vLLMを試したい方はL4にしてください。
ランタイムの設定が終わればここからはHugging FaceとvLLMで少し違うので個別に説明していきます。
PLaMo 3の推論 Hugging Face編
Hugging Faceの仕組みで実行するのはすごく簡単で、Google Colabで必要なパッケージはデフォルトで入っているので、基本的にpipインストールなどは必要ありません。ただ、Hugging Faceはすごい勢いで後方互換を壊していくので、最新のHugging Faceのtransformersなどのバージョンでは動かないということが発生する可能性があります。その時はnotebookにあるtransformers==4.57.1 にしてみるなど試してみてください。
pipインストールが必要ないので、まずはHugging Faceにアクセスするためのトークンを設定します。やり方としては以下のコマンドをnotebook上でたたきます。
!hf auth loginこれをたたくとtokenを生成するページのURLが表示されるので、サイトにアクセスして、tokenを作り、tokenを入力するということをしてください。
tokenを入力したら、Hugging Faceからモデルをダウンロードができるようになります。やり方は以下の通りです。
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("pfnet/plamo-3-nict-2b-base", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("pfnet/plamo-3-nict-2b-base", trust_remote_code=True)ここでエラーがでたらモデルの承認ができていない、Google Colab上でHagging Faceのtokenが指定できてないなどが考えられますので、戻って確認してください。
ダウンロードできれば以下のように推論することが可能です。
text = "これからの人工知能技術は"
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_tokens = model.generate(
inputs=input_ids,
max_new_tokens=32,
do_sample=True,
top_k=50,
top_p=0.95,
temperature=1.0,
)[0]
generated_text = tokenizer.decode(generated_tokens)
print(generated_text)出力としてはこのようなものが出てくると思います。
<|plamo:bos|>これからの人工知能技術はAIの進化系であり、音声の文字起こしや翻訳といった従来の用途の枠を超えた、全く新しい可能性を切り拓いていくことでしょう。
10年以上、ディープラーニング
これでHugging FaceのAPIを使ったPLaMo 3の推論ができました。
PLaMo 3の推論 vLLM編
次にPLaMo 3のvLLMを使った推論のやり方を示します。vLLMを使う場合はまずは以下のようにPLaMo 3用のvLLMのpluginをインストールします。
!pip install --no-cache git+https://github.com/pfnet-research/vllm-plamo3-plugin.gitここで--no-cache を付けないと、Google Colabのイメージに変なキャッシュがあるのか、pipインストールでエラーがでるので注意してください。
インストールが終わったらHugging Face編と同じようにHugging Faceのtokenを設定するために以下のようにコマンドをたたきます。
!hf auth loginその後、出力されたtokenの生成サイトに行き、tokenを作ったあとできたtokenを入力するということをします。
次にvLLMでモデルをダウンロードしてロードします。コードとしては以下の通りです。
import vllm
model = vllm.LLM("pfnet/plamo-3-nict-2b-base", trust_remote_code=True)ダウンロードできればあとは以下のように推論することができます。
response = model.generate(
prompts=["これからの人工知能技術は"],
sampling_params=vllm.SamplingParams(
n=1,
max_tokens=32,
top_k=50,
top_p=0.95,
temperature=1.0,
),
)[0]
generated_text = response.outputs[0].text
print(generated_text)出力例としては以下の通り。
AIによる画像認識が主流になるといわれている。自動運転などはすでに実用化されている自動車が事故にあわない為の技術として人工知能が使われている。 例えば自動車が障害物を
これでvLLMを使った推論もすることができました。
終わりに
今回はPLaMo 3の推論方法にのみ注目して紹介しました。ただ、最初に述べたように今回のモデルは事前学習モデルなので、そのままで使うことは難しいと思っています。このため、簡単にSFTする方法も後日紹介できればと思っています。

