電通総研 テックブログ

電通総研が運営する技術ブログ

Google Colabで高性能?LLMモデル『Orion-14B』を試用してみる

初めに

電通総研 X(クロス)イノベーション本部 の三浦です。

プライベートではChatGPT4を積極的に利用しておりますが、いくつかの不満点も抱えておりました。そんな中、ローカル環境で高性能なモデル「Orion-14B」がリリースされたと聞き、試しに使ってみることにしました。

なお、最初に結論を書いてしまいますが、「Orion-14B」を使用しても「ChatGPT4」で感じていた不満は解消されなく、「ChatGPT4」の強さを思い知らされた・・といった感じです。

しかし、個人でも最新モデルを容易に試せるという点で、今回の試行内容をご紹介いたします。

Orion-14Bとは?

ChatGPT4様による解説

Orion-14BはOrionStarAIによって開発された大規模な多言語対応の言語モデルシリーズです。このモデルは、14億のパラメータを持つ基礎モデルと、それに関連するいくつかの特化モデルから構成されています。これらのモデルには、チャットモデル、長文テキストモデル、量子化モデル、RAG微調整モデル、エージェント微調整モデルなどが含まれます。

Orion-14Bの基礎モデルは、2.5兆トークンの多様なコーパス上でトレーニングされ、そのデータは英語、中国語、日本語、韓国語などのテキストから収集されています。このモデルは、様々な言語で優れた性能を示しています。また、Orion-14Bには会話アプリケーションやその他の特定の用途に合わせて微調整されたモデルシリーズも含まれています。評価結果によると、Orion-14Bは多くのタスクで最先端の性能を達成しているとされています。

参考リンク

https://github.com/OrionStarAI/Orion
https://huggingface.co/OrionStarAI/Orion-14B-LongChat

下準備 Google Colabを契約する

無償で使用できる範囲では利用できないため、まず契約からとなります。
が、そこまでのGoogle Colabヘビーユーザーではないため、
「Pay As You Go」「100 Colab コンピューティング ユニット¥1,072」
を購入して今回は試しました。

月額契約をしなくても使いたい時だけGoogle Colabを使えるのは非常に助かりますね。

https://colab.research.google.com/signup/pricing?hl=ja

初期化部分

最高レベルの性能がどれくらい出るか知りたいため、量子化モデルでは試さずに一番性能がよさそうな?
「Orion-14B-LongChat」で試行します。
そのためには、大量のリソースが必要となるため、Google Colabのランタイムは、「A100 GPU」を選択します。

A100インスタンスにつなげたら、下のノートブックを実行します。
モデルのダウンロードにかなりの時間がかかります。

!pip install -U transformers accelerate bitsandbytes
!pip install -U sentencepiece flash_attn autoawq
!pip install -U torch-sdp


import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation.utils import GenerationConfig

tokenizer = AutoTokenizer.from_pretrained(
    "OrionStarAI/Orion-14B-LongChat",
    use_fast=False,
    trust_remote_code=True
)
model = AutoModelForCausalLM.from_pretrained(
    "OrionStarAI/Orion-14B-LongChat",
    device_map="auto",
    torch_dtype=torch.bfloat16,
    trust_remote_code=True
)
model.generation_config = GenerationConfig.from_pretrained(
    "OrionStarAI/Orion-14B-LongChat"
)

質問編

こんな単純なコードで使用できます。

messages = [
    {"role": "user", "content": """
logstashのメモリ設定状況をしりたいです。
curlで調べる方法をおしえてください。9600で調べるやつありましたよね?

"""}
]

response = model.chat(tokenizer, messages, streaming=False)
print(response)

返ってきた答えはこちら

はい、curlでログを表示させる方法があります。

curl -i http://localhost:9600/_cat/var?v=true

このコマンドを実行すると、サーバーのメモリ使用量が表示されます。
また、`-i`オプションを指定することで、ヘッダ情報も表示されます。

curl -i http://localhost:9600/_cat/var?v=true&h=memory
このコマンドを実行すると、サーバーのメモリ使用量とヘッダ情報が表示されます。

以上です。

結果は残念ながら、明らかな誤りが含まれています。

これはChatGPT4による回答で、非常に有用な内容です。
ぱっといろんなことが思い出せなくなってきている中年エンジニアにはとてもありがたいです。

もっと簡単なことも頼んでみましょう。
ローカルのファイル名一覧(拡張子無し)を作ってお願いします。

# メッセージリストの準備
messages = [
    {"role": "user", "content": """powershellで、特定フォルダのファイル名一覧をください。拡張子は抜いてください"""}
]

# 推論の実行
response = model.chat(tokenizer, messages, streaming=False)
print(response)

それっぽい結果が出ました。

Get-ChildItem -Path "C:\test" | Select-Object -Property Name, FullName | Where-Object {$_.FullName -ne $null} | ForEach-Object {$_.Name -replace '\.',''}

が、実際にこれを実行してみると拡張子を取り除くという要件が満たせておらず、ただ拡張子前の「.」を取り除くだけのコードとなっています。

ChatGPT4様の場合

powershellで、特定フォルダのファイル名一覧をください
拡張子は抜いてください

えっと、jsonにするパターンも

簡潔な質問にも丁寧に回答しています。

まとめ

ChatGPT4を上回るローカルLLM(Large Language Model)が存在すれば大いに助かるという期待を持ち、今回の試用に臨みましたが、残念ながら期待した成果は得られませんでした。しかし、この分野の進歩は著しく速いため、今後も定期的に有望なモデルを探し、その可能性を探っていきたいと思います。

執筆:@miura.toshihiko、レビュー:@yamashita.tsuyoshi
Shodoで執筆されました