清水理史の「イニシャルB」

“PCで自宅ChatGPT”がかなり手軽に! GUIで簡単導入でき日本語もOKの「Text generation web UI」

サイバーエージェントの「OpenCALM」を動かしてみた

サイバーエージェントの日本語対応大規模言語モデル「OpenCALM」をText generation web UIで動かした状態

 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カ月もすると状況が変わってしまう場合もあるので、必ず自分でも最新情報を検索して、本稿の内容を適宜読み替えるようにしてほしい。

複数のモデルが用意されるCyber Agentの「OpenCALM」。今回はもっとも高い68億パラメーターのモデルを利用する

実行に必要なPC環境

 Text generation web UIは、必要なモジュールを自動的に読み込むようになっているが、PC上で最低限の環境は用意しておく必要がある。

 具体的には以下を確認しておく。

  • OS環境:Windows 11/10
  • ビデオカード:NVIDIA製、16GB以上のVRAM
  • NVIDAドライバー:最新版をインストールしておく
  • Python:Microsoftストアからインストールすると楽

 今回は、Windows 11、Python 3.11.3、RTX3090(24GB)の環境を用意した。

今回はビデオカードが認識され、PythonがインストールされたWindows 11環境で検証する

Text generation web UIのインストールと起動

 それでは、インストールから実際の利用までの具体的な手順を見ていこう。

STEP1-1:インストーラーをダウンロードする

 ステップ1はインストールだが、これは非常に簡単だ。前述したText generation web UIのダウンロードページでWindows用のインストーラー(バッチファイル)をダウンロードし、実行するだけでいい。

ページを少しスクロールした[Installation]の[One-click installers]の[Windows]にある、[oobabooga-windows.zip]をクリックし、Windows用のインストーラーをダウンロード

 ただし、Edgeを利用している場合、「一般的にダウンロードされていないため」という理由で、セキュリティ機能によってダウンロードが阻止されてしまう。警告画面を展開し、「保持する」をクリックして保存する必要がある。

 インストーラーのZIPファイルをダウンロード後、任意のフォルダーに展開しておく。ただし、このフォルダーには、実行ファイルが配置されるうえ、後述するモデルもこのフォルダーにダウンロードされるため、空き容量に余裕がある場所を選択する必要がある。モデルによっては、数十GBの容量になるうえ、複数モデルを配置すると、あっという間に容量が削られていくので注意が必要だ。

Edgeの場合、標準ではダウンロードできないので強制的に保存する

STEP1-2:インストーラーを実行する

 インストーラーの展開が完了したら、「start_windows.bat」ファイルを実行すればいいのだが、インターネットからダウンロードした実行ファイルなので、実行時に警告が表示される。事前にファイルのプロパティで[セキュリティ]の[許可する]にチェックを付けておくか、実行時の警告画面で強制的に実行しよう。

展開したファイルも標準では実行が禁止されるのでプロパティでセキュリティの項目を許可しておくか、実行時の警告画面から強制的に実行する
ダウンロードしたファイルの「start_windows.bat」を実行

STEP1-3:GPUを選択する

 実行すると、まずGPUの選択肢が要求される。現状、Windows版はAMDのGPUでは動作しないうえ、CPUでは動作速度がかなり落ちて実用に耐えないので、必ず[A]のNVIDAを選択しておこう。

 その後、自動的に必要なモジュールがインストールされる。回線環境にもよるが、それなりに時間がかかるので、しばらくの間放置しておく。

インストール時にビデオカードの種類を選択。今回は[NVIDIA]を選ぶ

STEP1-4:起動が完了した

 インストールが完了すると、プロンプトに「Running on local URL: http://127.0.0.1:7860」のように表示される。これが起動完了の合図なので、ウェブブラウザーを使って上記URLにアクセスすればいい。

URLが表示されたら起動完了

STEP1-5:WebUIを起動する

 ブラウザーでアクセスすると、以下のようにチャットの画面が表示されるが、まだ入力しても何も反応がない。

ブラウザーでアクセスする。ただし、まだ利用できない

モデルを追加する

 ここまででインストールはひとまず完了だ。続いてステップ2に移り、チャットを可能にするためにモデル(LLM)を追加する。gitからクローンした場合は、「download-model.py」を使ってモデルをダウンロードすることもできるが、手動の方が選択肢が多いので、このスクリプトを使う必要はない。

STEP2-1: Hugging Faceにアクセスする

 まずは、利用するモデルを選ぶ。これには「Hugging Face」を利用する。Hugging Faceは、AI・機械学習に関する学習済みモデルなどの共有サービスで、企業や個人が開発したさまざまなモデルが登録されている。

▼Hugging Face
Hugging Face

 今回は、OpenCALMを利用するので、トップページの検索ボックスに「cyberagent」や「opencalm」などと入力して検索する。

Hugging Faceからモデルをダウンロードする

 ちなみに、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」欄で更新ボタンをクリックすると、ダウンロードしたモデルが一覧に表示される。ここでモデルを選択すれば、自動的にモデルのデータが読み込まれる。

一覧を更新すると、モデルを選択可能になる。選択すれば自動的にロードされる
OpenCALM 7Bをロードした際のGPUのメモリ状況。15GB前後なので、16GB版のビデオカードなら動作する可能性が高い

STEP3-2:モデルのパラメーターを設定する

 今回利用するOpenCALM 7Bの場合、モデルの設定は必要ない。GPTQで4bitなどに量子化されている場合、GPTQ欄で「wbits」などの設定が必要なケースもあるが、こうした情報はHugging Faceのモデルの説明に表示されているので、それに従って設定すればいい。

OpenCALM 7Bの場合はパラメーター設定なしで、そのまま動く

日本語の利用の設定する

 基本的には、これでチャットが可能なのだが、ステップ4として、日本語で利用するための設定をしよう。今回のアプリは海外製なので、基本的には英語が前提となっている。日本語で入力することも可能だが、実際には日本語モデルのOpenCALMであっても英語が混じってしまう。

 これは、テンプレートとして英語のコンテキストが設定されているためだ。プリセットされている英語のコンテキストなどがプロンプトに自動的に埋め込まれるため、AIが英語で回答したり、何も入力しなくても埋め込まれたスタートアップメッセージに従って自動的に会話が開始されたりする。このため、日本語で使うには[Chat settings]の設定が必須となる。

STEP4-1:テンプレートをクリアする

 日本語で使うためのもっとも簡単な方法は、[Chat settings]の不要な項目をクリアしてしまうことだ。

 [Charactor]項目の[Context][Greeting]、[Instruction template]の[Context][Turn template][Command for chat-instruct mode]などの項目を削除してしまえばいい(LangChainのtemplateと同様のもの)。

Chat settingsを空にしておく。英文があると、それがプロンプトにテンプレートとして組み込まれ、英語での回答になってしまう

 もちろん、すべて日本語に翻訳して入力しておいてもいいが、モデルによっては、コンテキストに入力された前提知識に強く縛られすぎて回答範囲が狭くなったり、コンテキストの内容に従ってユーザーが入力した質問に加えて余計な情報を永遠に回答しようとしたりする。

 ここは、モデルの特性に合わせて細かく調整しないと、意図しない動作をすることが多い。まずはさっぱり削除しておいた方が無難だ。

 なお、[Your name]や[Character’s name]程度は任意のものに設定しておいても回答に影響はない。チャットUIの表示が変わるので、好みに応じて設定してもいいだろう。

日本語に置き換えてもいいが、コンテキストがあることによって、知識が限定されたり、余計な会話をする場合もあるので、試行錯誤しながらの設定が必要

STEP4-2:日本語でチャットする

 ここまで設定しておけば、日本語で入力して、日本語で回答してくれるようになる。OpenCALMは、顔文字などを多用する、なかなか個性的なAIと言える。海外のモデルが間違えがちな日本の地名や人物なども正確に答えられる。

 ただし、複雑な文章の文脈を理解したり、込み入った計算をしたりするのは、さすがにモデルの容量が小さいために苦手な印象だ。こうした高度な文章の理解は、もっと容量の大きなモデルが必要になりそうだ。

さすが日本語で学習しているだけあり、地名などの情報は正確
複雑な文章は理解が難しい

(番外編)もっと簡単に日本語で回答させるには

 ここでは、日本語で回答させるためにコンテキストなどの情報をクリアしたが、これらの情報(キャラクター設定など)を保ったまま、もっと簡単に日本語対応させる方法もある。

 シンプルにチャット画面の[Start reply with]に「はい。」と入力しておけばいい。

 大規模言語モデルの基本動作は、「次の単語を予測する」というものだ。このため、システムの回答の文頭に日本語を指定しておけば、日本語で回答してくれる。

 完全ではないので、途中で英語が混じることもあるが、面倒な場合は、会話を必ず「はい。」で始めさせればいい。もちろん、「おっす!」でも「かしこまりました。」でも、日本語ならなんでもいい。

大規模言語モデルは次の単語を予測するのが基本動作なので、回答の先頭に「はい。」を入れておけば簡単に日本語化できる

確実に商用サービスとの差が縮まりつつある

 今回は、「Text generation web UI」を利用して、LLMを自宅のPCで動かす方法を紹介した。実際に使ってみると、その性能の高さに驚かされる。

 13B(130億)を超えたクラスでもかなり実用的だが、30B(300億)クラスは、本当に賢く、かなり複雑な文脈も理解でき、ChatGPTのような商用サービスとの差が次第に縮まりつつあるように思える。

 個人的には、90年代にPCの性能が日々上がっていった状況や、2000年代にブロードバンドの速度が次々に上がっていった状況を思い出す。当時より、各段に進化スピードが速く、1カ月もすると状況が大きく変わるのは異常とも言えるが、ビデオカード1枚あれば、この状況をリアルタイムに楽しめるのは、実に幸せだ。

4bit化された300億パラメーターのモデルだと、複雑な文章も理解できる。ChatGPTほどではないが、かなり近い賢さになる
清水 理史

製品レビューなど幅広く執筆しているが、実際に大手企業でネットワーク管理者をしていたこともあり、Windowsのネットワーク全般が得意ジャンル。最新刊「できるWindows 11」ほか多数の著書がある。