清水理史の「イニシャルB」
“PCで自宅ChatGPT”がかなり手軽に! GUIで簡単導入でき日本語もOKの「Text generation web UI」
サイバーエージェントの「OpenCALM」を動かしてみた
2023年7月10日 06:00
ChatGPTのような大規模言語モデル(LLM)を、自宅のPCで動かしたい――そんなときに便利なのが、オープンソースの「Text generation web UI(oobabooga/text-generation-webui)」だ。
GUI環境のチャットインターフェースで、モデルのダウンロードから、パラメーター設定、プロンプトテンプレート作成と、誰でも簡単に大規模言語モデルを動かせるようになっている。今回は、日本語データセットで学習されたサイバーエージェントのLLM「OpenCALM」を動かしてみる。
ハードウェアさえ用意すれば手軽に大規模言語モデルが動く時代
大規模言語モデルの進化によって、一般的なPCでも動く、小さなパラメーターサイズのモデルが登場し、それらを動かすための周辺環境も整ってきた。
「一般的なPC」といっても、現状はVRAMが16GB以上のNVIDIAのビデオカードでないと、まともな検証はできない。ソフトウェア的なハードルは確実に下がってきており、今回紹介する「Text generation web UI」のような手軽に扱えるソフトウェアが増えてきた。
▼Text generation web UIのダウンロード
oobabooga/text-generation-webui(GitHub)
このソフトウェアは、ChatGPTのような対話型生成AIのGUI環境を提供するものだが、かなり完成度が高く、モデルのダウンロードがワンクリックでできたり、プロンプトに自動的に埋め込むテンプレートを作成できたり、キャラクター設定ができたりと、ローカルLLMを簡単に扱えるように工夫されている。
今回は、このWebUIの基本的な使い方を紹介する。利用する言語モデルは、5月にサイバーエージェントからリリースされた日本語環境で学習済みの「OpenCALM」を利用する。以前、本コラムで(VRAMが足りず)断念したrinnaの日本語モデルは、今回のWebUIでは動作しなかった。
160M、400M、830M、1.4B、2.7B、6.8Bと、パラメーター数の違いによって豊富なラインアップがあるため、ビデオカードのメモリが少ないケースでも利用できる。今回は、先日筆者が個人的に入手した中古のRTX3090(VRAM24GB)があるので、もっとも精度が高い6.8B(68億パラメーター)を利用することにする。
なお、本稿は2023年7月6日時点の情報をもとにしているが、本稿をお読みいただいたときには、LLMとりまく環境が変わってしまっているかもしれない。この分野は、数カ月、いや、1カ月もすると状況が変わってしまう場合もあるので、必ず自分でも最新情報を検索して、本稿の内容を適宜読み替えるようにしてほしい。
実行に必要なPC環境
Text generation web UIは、必要なモジュールを自動的に読み込むようになっているが、PC上で最低限の環境は用意しておく必要がある。
具体的には以下を確認しておく。
- OS環境:Windows 11/10
- ビデオカード:NVIDIA製、16GB以上のVRAM
- NVIDAドライバー:最新版をインストールしておく
- Python:Microsoftストアからインストールすると楽
今回は、Windows 11、Python 3.11.3、RTX3090(24GB)の環境を用意した。
Text generation web UIのインストールと起動
それでは、インストールから実際の利用までの具体的な手順を見ていこう。
STEP1-1:インストーラーをダウンロードする
ステップ1はインストールだが、これは非常に簡単だ。前述したText generation web UIのダウンロードページでWindows用のインストーラー(バッチファイル)をダウンロードし、実行するだけでいい。
ただし、Edgeを利用している場合、「一般的にダウンロードされていないため」という理由で、セキュリティ機能によってダウンロードが阻止されてしまう。警告画面を展開し、「保持する」をクリックして保存する必要がある。
インストーラーのZIPファイルをダウンロード後、任意のフォルダーに展開しておく。ただし、このフォルダーには、実行ファイルが配置されるうえ、後述するモデルもこのフォルダーにダウンロードされるため、空き容量に余裕がある場所を選択する必要がある。モデルによっては、数十GBの容量になるうえ、複数モデルを配置すると、あっという間に容量が削られていくので注意が必要だ。
STEP1-2:インストーラーを実行する
インストーラーの展開が完了したら、「start_windows.bat」ファイルを実行すればいいのだが、インターネットからダウンロードした実行ファイルなので、実行時に警告が表示される。事前にファイルのプロパティで[セキュリティ]の[許可する]にチェックを付けておくか、実行時の警告画面で強制的に実行しよう。
STEP1-3:GPUを選択する
実行すると、まずGPUの選択肢が要求される。現状、Windows版はAMDのGPUでは動作しないうえ、CPUでは動作速度がかなり落ちて実用に耐えないので、必ず[A]のNVIDAを選択しておこう。
その後、自動的に必要なモジュールがインストールされる。回線環境にもよるが、それなりに時間がかかるので、しばらくの間放置しておく。
STEP1-4:起動が完了した
インストールが完了すると、プロンプトに「Running on local URL: http://127.0.0.1:7860」のように表示される。これが起動完了の合図なので、ウェブブラウザーを使って上記URLにアクセスすればいい。
モデルを追加する
ここまででインストールはひとまず完了だ。続いてステップ2に移り、チャットを可能にするためにモデル(LLM)を追加する。gitからクローンした場合は、「download-model.py」を使ってモデルをダウンロードすることもできるが、手動の方が選択肢が多いので、このスクリプトを使う必要はない。
STEP2-1: Hugging Faceにアクセスする
まずは、利用するモデルを選ぶ。これには「Hugging Face」を利用する。Hugging Faceは、AI・機械学習に関する学習済みモデルなどの共有サービスで、企業や個人が開発したさまざまなモデルが登録されている。
▼Hugging Face
Hugging Face
今回は、OpenCALMを利用するので、トップページの検索ボックスに「cyberagent」や「opencalm」などと入力して検索する。
ちなみに、Hugging Faceには、公式のモデルだけでなく、公式モデルをベースに、ユーザーがGPTQなどで低量子化したモデルも登録されている。これらは自己責任で利用する必要があるが、8bitや4bitのモデルを利用することで、ビデオメモリの消費を少なくすることができるため、VRAMが足りない環境でどうしてもモデルを動かしたいときなどに利用することもできる。
たとえば、4bitモデルを使えば、VRAMが24GBのRTX3090環境で30B、つまり300億クラスのモデルを20GB前後のVRAMで動かすことも可能だ。
STEP2-2:ブランチ名をコピーする
話を戻そう。今回は、以下のモデルを利用するので、Hugging Faceのモデルのページにアクセスし、上部のタイトル部分のコピーアイコンをクリックして、「cyberagent/open-calm-7b」というブランチ名をコピーしておく。
▼Open-calm-7b
cyberagent/open-calm-7b(Hugging Face)
STEP2-3:モデルをダウンロードする
コピーしたら、WebUIに戻り、[Model]タブの画面下にある「Download custom model or LoRA」の欄に、コピーしたブランチ名を貼り付けて、[Download]をクリックする。これで、ダウンロードが実行される。なお、コマンドプロンプトの画面でダウンロード状況を確認可能だ。
Text generation web UIではHugging Faceのほとんどのモデルを動作させられるが、中にはエラーが発生してしまうモデル(rinnaなど)もある。また、モデルによっては、動作が非常に遅いなどの不具合を抱えている場合もある。詳しくはHugging Faceの説明を参照し、きちんと理解してから利用してほしい。
WebUIを設定する
モデルをダウンロードできたら、ステップ3に移ろう。WebUIの基本的な設定をする。
STEP3-1:モデルを読み込む
まずはモデルを読み込む。「Model」タブの上部の「Model」欄で更新ボタンをクリックすると、ダウンロードしたモデルが一覧に表示される。ここでモデルを選択すれば、自動的にモデルのデータが読み込まれる。
日本語の利用の設定する
基本的には、これでチャットが可能なのだが、ステップ4として、日本語で利用するための設定をしよう。今回のアプリは海外製なので、基本的には英語が前提となっている。日本語で入力することも可能だが、実際には日本語モデルのOpenCALMであっても英語が混じってしまう。
これは、テンプレートとして英語のコンテキストが設定されているためだ。プリセットされている英語のコンテキストなどがプロンプトに自動的に埋め込まれるため、AIが英語で回答したり、何も入力しなくても埋め込まれたスタートアップメッセージに従って自動的に会話が開始されたりする。このため、日本語で使うには[Chat settings]の設定が必須となる。
STEP4-1:テンプレートをクリアする
日本語で使うためのもっとも簡単な方法は、[Chat settings]の不要な項目をクリアしてしまうことだ。
[Charactor]項目の[Context][Greeting]、[Instruction template]の[Context][Turn template][Command for chat-instruct mode]などの項目を削除してしまえばいい(LangChainのtemplateと同様のもの)。
もちろん、すべて日本語に翻訳して入力しておいてもいいが、モデルによっては、コンテキストに入力された前提知識に強く縛られすぎて回答範囲が狭くなったり、コンテキストの内容に従ってユーザーが入力した質問に加えて余計な情報を永遠に回答しようとしたりする。
ここは、モデルの特性に合わせて細かく調整しないと、意図しない動作をすることが多い。まずはさっぱり削除しておいた方が無難だ。
なお、[Your name]や[Character’s name]程度は任意のものに設定しておいても回答に影響はない。チャットUIの表示が変わるので、好みに応じて設定してもいいだろう。
(番外編)もっと簡単に日本語で回答させるには
ここでは、日本語で回答させるためにコンテキストなどの情報をクリアしたが、これらの情報(キャラクター設定など)を保ったまま、もっと簡単に日本語対応させる方法もある。
シンプルにチャット画面の[Start reply with]に「はい。」と入力しておけばいい。
大規模言語モデルの基本動作は、「次の単語を予測する」というものだ。このため、システムの回答の文頭に日本語を指定しておけば、日本語で回答してくれる。
完全ではないので、途中で英語が混じることもあるが、面倒な場合は、会話を必ず「はい。」で始めさせればいい。もちろん、「おっす!」でも「かしこまりました。」でも、日本語ならなんでもいい。
確実に商用サービスとの差が縮まりつつある
今回は、「Text generation web UI」を利用して、LLMを自宅のPCで動かす方法を紹介した。実際に使ってみると、その性能の高さに驚かされる。
13B(130億)を超えたクラスでもかなり実用的だが、30B(300億)クラスは、本当に賢く、かなり複雑な文脈も理解でき、ChatGPTのような商用サービスとの差が次第に縮まりつつあるように思える。
個人的には、90年代にPCの性能が日々上がっていった状況や、2000年代にブロードバンドの速度が次々に上がっていった状況を思い出す。当時より、各段に進化スピードが速く、1カ月もすると状況が大きく変わるのは異常とも言えるが、ビデオカード1枚あれば、この状況をリアルタイムに楽しめるのは、実に幸せだ。