ロゴ ロゴ

IntelArcでもAirLLMで遊びたい

まえがき

芝浦祭も終わって、ハレが終わり、ケが戻ってきたといったところです.実は芝浦祭のあとは打ち上げがあったのですが、研究室の用事で参加できませんでした.とても悲しかった.どうもウグイスです.

今回は、芝浦祭中にこてつさんに教えてもらったAirLLMを試してみたという記事になります.でもただ遊ぶだけでは芸がないということで、いつも通りのIntelArcで遊んでみた記事にしてみた感じです.

ちなみにAirLLMは簡単にIntelArcで実行できました.素晴らしい

AirLLLMとは

私は人工知能系統の知識には詳しくはないので、ザックリにはなりますが、層ごとに推論を実行して、その層を入れ替えることで、1層分のVRAMがあれば推論ができる技術みたいです.めちゃデカいモデルでも行けます.

もちろん1層実行ごとに層を入れ替えるので、転送時間がネックになります.あとで触れますが恐ろしいほどに時間がかかります.

使用したモデル

cyberagent/Llama-3.1-70B-Japanese-Instruct-2407

LLama3.1-70B-instructを継続事前学習した日本語モデルらしいです.

AirLLMのサンプルスクリプトでは別のモデルを使っていたのですが、なんとなく日本語モデルを使いたかったので、適当に調べて性能がまあいいというのを引っ張ってきました.

スクリプト

今回実行したのは、以下のスクリプトです.

from airllm import AutoModel

MAX_LENGTH = 128
# could use hugging face model repo id:
model = AutoModel.from_pretrained("cyberagent/Llama-3.1-70B-Japanese-Instruct-2407", device="xpu")

messages = [
    {"role": "user", "content": "AIによって私たちの暮らしはどのように変わりますか?"}
]

input_ids = model.tokenizer.apply_chat_template(messages,
                                                add_generation_prompt=True,
                                                return_tensors="pt",
                                                return_attention_mask=False,
                                                truncation=True,
                                                max_length=MAX_LENGTH,
                                                padding=False)

generation_output = model.generate(
    input_ids.to("xpu"),
    max_new_tokens=20,
    use_cache=True,
    return_dict_in_generate=True)

output = model.tokenizer.decode(generation_output.sequences[0])

print(output)

AirLLMのサンプルプログラムを元に、cyberagentのモデルの形に合わせて書き直しました.

素晴らしいのはfrom_pretrainedのdeviceにxpuを渡せば簡単にIntelArcで実行できることです.

必要なら弄るとはいえ、内部の実装を弄る必要がないのはそれだけでも負担が軽いです.

実行結果

  • 出力結果:AI(人工知能)によって私たちの暮らしは多くの面で変化する
  • 実行時間:26m28.938s

かなり終わっている結果になりました.たったこれだけを出力するのに、これだけかかるとなるとさすがに厳しいものがあります.少なくとも普通の用途では実用性はないでしょう.

まあ、例えば1回実行できればいいとか、時間がかかってもよいとか他の制約条件が付けば全然ありな技術かなと思いました.

モデル圧縮

これだけで終わっても別にいいのですが、気になることがGitHubのリポジトリに書いていたので、それも試してみます.

モデル圧縮とはモデルの重み部分だけを量子化することで推論速度を早くする技術らしいです.

AirLLMにはbitsandbytesを使って実装されています.

bitsandbytesはデフォオルトではIntelGPUをサポートしていないのですが、実験的にサポートしているみたいなので、それを入れて、実行する方法をとります.

ビルド地獄

今まではintel extension for pytorchは2.3.110+xpuというバージョンを使っていました.これはビルド済みでpipで簡単に入れることができます.

どうにも、bitsandbytesは2.4以降のバージョンで試験的にサポートされています.これはビルド済みのパッケージがなく、端的に言えば自分でビルドするしかないです.

で試したんですが,結局うまくいきませんでした.

あとがき

というわけで,結局適当に動かしてやっただけになってしまいました.

ビルドは結局うまくいきませんでした.何かしらビルドに要素が足りなかったのか,何なのか.そのうちリベンジしたいと思います.

ご精読ありがとうございました.ではまた次のブログでお会いしましょう.ウグイスでした.

コメント入力

関連サイト