清水理史の「イニシャルB」
NVIDIA「Chat With RTX」を、RTX4060搭載ノートPCで動かす〜ローカルLLMでRAGを実現
2024年2月26日 06:00
NVIDIAから、PDFやWordなどの文書を元に大規模言語モデルでチャットできるアプリ「Chat With RTX」が公開された。
Windowsベースで、GeForce RTX30または40シリーズが搭載されたPCなら簡単に利用できる。残念ながら日本語は得意ではないが、ローカルでの言語モデルの活用方法を提示する好例と言える。実際に試してみた。
社内文書をもとにしたQ&AなどのAIチャットができる
Chat With RTXは、簡単に説明すると、文書について言語モデルでチャットできるようにするローカルアプリだ。
ChatGPTやCopilotなどは、クラウドで提供されているサービスを利用する方式となっているが、Chat With RTXは基本的にローカルで動作するように設計されているのが特徴となる(起動時の環境チェックや準備などでインターネット接続は必要)。
同様に、言語モデルをローカルで動作させる方法としては、「LMStudio」などのアプリや「Ollama」を利用する方法が人気だが、Chat With RTXは次のような特徴を備えている。
- TensorRT-LLMで最適化されたモデルを利用する(高速)
- ファイルやYouTubeトランスクリプトのRAG(Retrieval Augmentation Generation)が実装済みで提供される
つまり、RTX環境に最適化されたLLM(大規模言語モデル)を使って、ローカルで文書QAなどを実現できる(RAGとは、外部のソースから取得した情報をもとに回答を生成すること。自分が用意した文書を参照させて言語モデルに回答させることが、RAGの活用方法の一例となる)。ローカルのデータを、ローカルのLLMを使って、ローカルのベクトル検索で利用できるため、社外にアップロードすることができない内部的な文書を利用したチャットが手軽に実現できるわけだ。
Llama2とMistralを利用可能
利用可能な言語モデルは、2024年2月時点では、Llama2 13B(int4)、Mistral 7B(int4)となっている。いずれも、前述したようにTensorRT-LLMによって最適化されたエンジンとなっているだけでなく、LLMを構成するパラメーター(重み)を量子化(連続する値を離散的に表現)することによって容量が少なくなっているのが特徴だ。
Llama2 13Bの場合、本来であれば26GB前後のVRAMが必要になるが、4bit量子化によって7GB前後のVRAM消費量で済む。実際には、さらにベクトル化するためのEmbeddingモデルも読み込む必要があるので、Llama2 13Bを利用する場合でトータル10GB前後、Mistral 7Bを利用する場合でトータル6GB前後のVRAMが消費される。
なお、インストール時にビデオカードのメモリ容量をチェックしているようで、筆者の利用していたノートPC(RTX4060 8GB)ではLlam2 13Bのインストールが省略され、Mistralのみインストールされた。
使い方は簡単で、インストール後にデスクトップに登録されたアイコンからバッチファイルを起動するだけとなる。Pythonで作成されたプログラムとなっており、Anaconda(Miniconda)によって作成された環境から起動するように構成されている。
しばらくするとウェブブラウザーでUIが起動するので、左側で利用する言語モデルを選択し、右側の「Dataset」でRAGの対象とする文書のフォルダーを指定。後は、ChatGPTなどと同様にチャットで質問すればいい。
標準では、インストール先(C:UsersmshimAppDataLocalNVIDIAChatWithRTXRAGtrt-llm-rag-windows-main)の「dataset」フォルダーに保存されている、同社の31個のリリースドキュメント(テキストファイル)が対象となっている。
前述したように、基本的には英語で利用する必要があるが、「DLSS3.5の特徴を教えてください」のように日本語で質問すると、保存されている文書からDLSS3.5について記述されている部分を見つけ出して、そこから回答が生成される(回答はほぼ英語)。
日本語ドキュメントも扱える
日本語はまったく扱えないのかというと、そういうわけでもない。試しに、筆者がここ数カ月で書いたWi-Fi 7関連の原稿(Wordのdocx)が保存されているフォルダーを指定し、「Wi-Fi 7の最大速度を教えてください」と依頼すると、「46Gbps」と正しく回答してくれた。
Chat With RTXというか、LLMを利用したRAGでは、検索対象の文書をベクトルデータとして扱うのが一般的だ。文書をいくつかのチャンクに分割し、それを数値の組み合わせで表現する。こうしてベクトルで表現することで、意味的に近いものを探し出すことができるようになっている(最終的に検索結果をコンテキストとしてLLMに入力して回答を生成する)。
実際に試してみるとわかるが、Chat With RTXで新しいフォルダーを指定すると、コンソールで「Generating embeddings」というタスクが走っていることが確認でき、しばらくすると指定したフォルダーと同じ階層に「●●_Wi-Fi7_vector_embedding」というフォルダーが作成されていることに気付く。ここに格納されているのが、実際の検索で利用されるデータになる。
本アプリは、もともと開発者向けに動作を説明するためのデモアプリであるが、こうした動作を素人でも確認できる点は興味深い。
YouTubeの動画はトランスクリプトをベースに回答する
Chat With RTXでは、もうひとつ、YouTubeの動画に対してチャットできる機能も搭載されている。
右上のDatasetを「YouTube URL」に切り替え、動画のURLを指定して、トランスクリプトのダウンロードを実行する。すると、ドキュメントのときと同様に、取得したトランスクリプトがエンベディングされ、ベクトルデータベースとして保存される。これで、同様にチャットで質問すれば回答される。
なお、動画そのものを解析しているわけではなく、あくまでもYouTube側で生成されたトランスクリプト(字幕用文字データ)を利用している点に注意が必要だ。これはEdgeのCopilotと同じしくみだ。CopilotでもYouTubeの動画について質問できるが、こちらも同様に、トランスクリプトを参照して回答している。
将来的に動画を読み込めるマルチモーダルモデルが登場すれば話は別だが(それでも入力のデータ量が膨大になるので、気軽に使えるとは限らない)、現状は何らかのテキストデータがないとLLMは回答できない。なので、トランスクリプトが存在しない動画(公開されていない場合や投稿直後、ライブ配信など)では、利用できない。
しかも、Chat With RTXの場合、読み込むトランスクリプトの言語が「en」で決め打ちとなっているため、英語のトランスクリプトが存在しない動画については回答できない。
日本語版の登場を期待
以上、NVIDIAから公開されたChat With RTXを試してみたが、このようにローカルで動作するLLMが実用的になる日も近いと感じさせられた。しかしながら、現状は日本語に難があり、そのまま利用するのは難しい印象だ。
もともと、開発者向けのデモプログラムという位置づけなので、誰かがが、これをベースに日本語版を作ってくれることを期待したいところだ。