Microsoftから公開されたPhi3-miniをTransformers + MacのGPUを使ってで動かしました。
Phi-3とは
Microsoftが公開している小規模言語モデルです。パラメータ数を抑えながら高い制度の回答を返すことができます。パラメータ数が少ないため、ラップトップやエッジデバイスなどで言語モデルを使うことが可能になります。
準備
以下からモデルのダウンロードを行います。 huggingface.co
モデルをダウンロードしたら同じディレクトリに以下のコードをmain.pyとして保存します。
import gradio as gr import torch from transformers import AutoTokenizer, AutoModelForCausalLM device = torch.device('mps') model_name = "./" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto", trust_remote_code=True, ).to(device) def get_output(text, start_token="<|assistant|>", eos_token="<|end|>"): print(text) start_index = text.find(start_token) end_index = text.rfind(eos_token) if text[-len(eos_token):] != eos_token: end_index = -1 return text[start_index+len(start_token):end_index].strip() def generate_response(input_text): text = f'<|user|>\n{input_text}<|end|>\n<|assistant|>' token_ids = tokenizer.encode(text, add_special_tokens=False, return_tensors='pt').to(device) token_len = len(token_ids[0]) with torch.no_grad(): output_ids = model.generate( token_ids.to(model.device), max_new_tokens=token_len+100 ) output = get_output(tokenizer.decode(output_ids.tolist()[0])) return output gr.Interface(fn=generate_response, inputs='text', outputs='text').launch()
またはTransformersの最新の開発バージョンをインストールしコードのmodel_nameを以下のように設定してください。
model_name = "microsoft/Phi-3-mini-128k-instruct"
詳細についてはPhi-3のモデルページを参照してください。
実行環境
- OS:MacOS Sonoma
- SoC:M3 Pro (CPU 12C GPU 18C)
- RAM:18GB
- Python:3.11.9
- Torch:2.4.0dev
- Transformers:4.40.0
実行結果
日本語と英語で試してみました。
英語の回答を翻訳すると以下のようになります。
実行時のTransformersの生成速度とメモリ使用量は以下の値でした。
生成速度 | メモリ使用量 |
---|---|
4Tokens/s | 13.95GB |
終わりに
Phi-3は小型軽量でありながら日本語に対しても高精度なモデルだと感じました。 MacBookでローカルで動かすことができる点が非常に嬉しいです。