情報整理用として活用中


ローカルLLMについて


LLMが家のパソコンでも動かせそうだということで、試しにELYZA-japanese-Llama-2-7b-instruct※をGoogle Colabで動かしてみた。
因みに上記※は、MetaのLlama 2をベースとした日本語LLMとのことで、東大松尾研ベンチャーのELYZAがリリースしているもの。
https://note.com/elyza/n/na405acaca130

試してみたこと

  • 参考にしたページ→ELYZAの新しい言語モデル(ELYZA-japanese-Llama-2-7b)を無料版Google Colabで試してみた
     ⇒上記を参考に、Google Colabにコードをコピペして動かしてみた。
  • Google Colabのruntime typeとしては、①通常のCPU以外に、②T4-GPU、③v2-8 TPUが無料枠として使える。
    ②については、簡単な質問(こんにちは、元気ですか?)は2秒くらいでリスポンスがあるが、1行くらいの文章だと30秒、また3行くらいの質問(上記ページのサンプルでアンケートを作成してもらう質問)だと5分くらい要するのでちょっと厳しいかなと思える。
    また一番強力と思われた③については、前段の処理(インストールやモデルの設定など)は②より速かったものの、いざ実行しようとした際にいきなり1つ目の簡単な質問を投げたらそこでストップしてしまい、全く使い物にならなかった(このプロセッサは、学習用データを作成するには向いているかもしれないが、会話のような汎用的な実行には向いていないのかもしれない。。)
    また①については、前処理の「トークナイザーとモデルの準備」のところでエラとなってしまい、一旦ストップ。
Google Colabへのコード

============
# パッケージのインストール
!pip install transformers accelerate bitsandbytes

===========
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

# トークナイザーとモデルの準備
tokenizer = AutoTokenizer.from_pretrained(
    "elyza/ELYZA-japanese-Llama-2-7b-instruct"
)
model = AutoModelForCausalLM.from_pretrained(
    "elyza/ELYZA-japanese-Llama-2-7b-instruct",
    torch_dtype=torch.float16,
    device_map="auto"
)

==========
B_INST, E_INST = "[INST]", "[/INST]"
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人のアシスタントです。"

def q(text):
	prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst} ".format(
	    bos_token=tokenizer.bos_token,
	    b_inst=B_INST,
	    system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
	    prompt=text,
	    e_inst=E_INST,
	)
	with torch.no_grad():
	    token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
	    output_ids = model.generate(
	        token_ids.to(model.device),
	        max_new_tokens=1024,
	        pad_token_id=tokenizer.pad_token_id,
	        eos_token_id=tokenizer.eos_token_id,
	    )
	output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
	print(output)

========
q("""こんにちは。元気ですか?""")

という訳で、(試してはいないが)私の3万円のノートPC(CPUはN5100)だと全く動作しないのは自明だけど、クラウド上のリソースを活用するとローカルLLMもお試しすることが出来るのは確認できた。T4-GPUのRAMが15Gくらいなので、これがもう少し容量あるタイプであればもっといろいろなことが試せそうなので、他に使えそうな無料クラウドがないか確認してみたい。

試してみたこと(その2)

次に、このサイトを参考にHuggingfaceとリンクしてLLMを試してみた。
このGoogle Colabのリンクを開いて自分のリポジトリにコピーをしたうえで動かしてみた。
HuggingfaceにあるLlamaを動かすためにはHuggingfaceのアカウント作成が必要で、そのうえでAPI Tokenを作成しそのトークンをGoogle Colabの認証キーに設定する必要があるが、いざColabで動かそうとすると認証エラーとなる。

色々と調べた結果、
①今回使用するHuggingfaceにあるLlamaの使用許可を得る必要がある。⇒こちらはHuggingfaceに申請してしばらくしたら承諾となり解決。
②次にHuggingfaceのトークンについて、トークンタイプがデフォルトのFine-grainedでは駄目のようで、ネットで見たらReadでないとダメと書いてあったのでそうしたらまだダメで、また別の記事を見たら最近はWriteでないとダメと書いてあったのでそちらに変更しても上手くいかず。
③上記はタブレットのブラウザ上で実施していたが、その後色々と調べたらどうもキャッシュが悪さするケースもありとあったので、翌日、ノートパソコンから実施したら上手く動作した。
なので、この3点を実施してようやくちゃんと動いた。
ちなみに本プログラムについてはTPUでも動作したので、プログラムの書き方によってTPUの動作に制約が出てくるのかもしれない。

その他、ローカルLLM参考ページ


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP