HUOXIU

ChatGLMをいじくり回すときに落とし穴を避けるためのヒント

昨日、データテクノロジーカーニバルから戻った後、大規模言語モデルを用いてデータベース運用・保守知識ベースを学習する方法を学ぶため、ChatGLMシステムを導入したと書きました。多くの友人は私の話を信じてくれず、「Baiさん、そんなに歳を取っているのに、どうして自分でこんなことをいじっているの?」と言っていました。そこで、皆さんの疑問を払拭するために、今日はChatGLMのセットアップ手順を皆さんと共有し、試してみたい方のために落とし穴を避けるためのヒントもご紹介します。

ChatGLM-6Bは、清華大学のKEGラボとZhipu AIが2023年に共同で学習したGLM言語モデルをベースに開発されました。ユーザーの質問や要望に対して適切な回答とサポートを提供する大規模言語モデルです。上記の回答はChatGLM独自の回答です。GLM-6Bは、62億のパラメータを持つオープンソースの事前学習済みモデルで、比較的小規模なハードウェア環境でもローカルに実行できることが特徴です。この機能により、大規模言語モデルに基づくアプリケーションをより幅広いユーザーに届けることができます。KEGラボの目標は、さらに大規模なGLM-130Bモデル(1300億パラメータ、GPT-3.5に匹敵)を、8-way RTX 3090を搭載したローエンド環境で学習できるようにすることです。

この目標が達成されれば、大規模言語モデルに基づくアプリケーション開発を目指すすべての人にとって大きな恩恵となるでしょう。現在のChatGLP-6B FP16モデルは13GB強、INT-4量子化モデルは4GB未満であり、6GBのVRAMを搭載したRTX 3060TIで問題なく実行できます。

導入前はこれらの詳細をよく理解していなかったため、12GBのRTX 3060を購入しました。しかし、これは特にパワー不足でした。インストールと導入後も、FP16モデルを実行できませんでした。テストと検証を自宅で行うことが分かっていたら、もっと安い3060 Tiを買っていたでしょう。また、ロスレスFP16モデルを実行するには、VRAMが24GBの3090が必要でした。

ChatGLP-6Bの機能を自分のマシンでテストしたいだけなら、THUDM/ChatGLM-6Bモデルを直接ダウンロードする必要はおそらくないでしょう。Huggingfaceには、ダウンロード可能なパッケージ済みの量子化モデルがいくつか用意されています。ただし、モデルのダウンロードは非常に遅いので、int4量子化モデルを直接ダウンロードすることもできます。

このインストールは、i7 8コアプロセッサと12GB VRAMを搭載したRTX 3060グラフィックカードを搭載したPCで完了しました。これは仕事用のコンピューターなので、ChatGLMをWindows Subsystem for Linux(WSL)にインストールしました。Windows WSLサブシステムへのChatGLMのインストールは、Linux環境に直接インストールするよりも複雑です。最大の課題はグラフィックカードドライバーのインストールです。ChatGLMをLinuxに直接展開する場合は、NVIDIAドライバーを直接インストールし、modprobeを使用してネットワークカードドライバーをアクティブ化する必要があります。しかし、WSLへのインストールは大きく異なります。

ChatGLMはGitHubからダウンロードでき、ウェブサイトにはWindows WSLへのChatGLMのデプロイ方法などを含む基本的なドキュメントもいくつか用意されています。しかし、初心者がドキュメントを忠実に守ると、多くの落とし穴に遭遇するでしょう。

Requests.txt ファイルには、ChatGLM が使用する主要なオープンソースコンポーネントとそのバージョン番号が記載されています。その中核となるのは Transformers で、バージョン 4.27.1 が必要です。この要件は厳密に強制されるわけではなく、通常、それより若干低いバージョンでも許容されますが、セキュリティ上の理由から、同じバージョンを使用することをお勧めします。Icetk はトークン処理を担当し、cpm_kernels は漢字処理モデルと CUDA の中核を担い、protobuf は構造化データを保存します。Gradio は、Python を使用して AI アプリケーションを迅速に生成するためのフレームワークです。Torch については、あまり説明の必要がありません。

ChatGLMはGPUを搭載していない環境でもCPUと32GBの物理メモリで動作しますが、動作速度が非常に遅いため、デモ用途にのみ適しています。ChatGLMを効果的にプレイするには、GPUの搭載を強くお勧めします。

ChatGLMをWSLにインストールする際の最大の落とし穴は、グラフィックカードドライバーです。Git上のChatGLMのドキュメントは非常に分かりにくく、プロジェクトに馴染みのない人や、この種のデプロイメントを初めて行う人にとっては、本当に頭の痛い作業となります。実際には、ソフトウェアのデプロイメント自体はそれほど複雑ではありませんが、グラフィックカードドライバーにはかなりのスキルが必要です。

LinuxはWSLサブシステム上に展開されるため、エミュレーションシステムであり、完全なLinuxシステムではありません。そのため、NVIDIAグラフィックカードドライバーはWindowsにインストールするだけで、WSLで有効化する必要はありません。ただし、CUDAツールはWSL Linux仮想環境にインストールする必要があります。Windows上のNVIDIAドライバーは、公式ウェブサイトから入手した最新のドライバーである必要があります。Windows 10/11に付属の互換ドライバーは使用できません。したがって、公式ウェブサイトから最新のドライバーをダウンロードしてインストールすることが不可欠です。

Windowsドライバをインストールしたら、WSLにCUDAツールを直接インストールできます。インストール後、「nvidia-smi」を実行してください。上記のようなインターフェースが表示されれば、最初の落とし穴を回避できたことになります。実は、CUDAツールのインストールには、さらにいくつか小さな問題があります。1つは、システムに適切なバージョンのgcc、gcc-dev、makeなどがインストールされている必要があることです。これらのコンポーネントが不足していると、CUDAツールのインストールは失敗します。

上記は、問題が発生する可能性のある事前準備の概要です。NVIDIAドライバの問題を回避できれば、その後のインストールは非常にスムーズです。システムの選択に関しては、Debian互換のUbuntuを選択することをお勧めします。Ubuntuの新しいバージョンには、多くのソフトウェアバージョン互換性の問題を解決し、一部のソフトウェアを自動的にダウングレードできる、非常にインテリジェントなaptitude機能が搭載されています。

インストールガイドに従うことで、以降のインストールプロセスをスムーズに完了できます。ガイドに従って `/etc/apt/sources.list` 内のインストールソースを置き換えることをお勧めします。これにより、インストールが大幅に高速化され、ソフトウェアバージョンの互換性の問題を回避できます。もちろん、置き換えなくても、以降のインストールプロセスに必ずしも影響するわけではありません。

これまでのハードルをすべてクリアできたら、最後のステップ、web_demo の起動に進みます。`python3 web_demo.py` を実行すると、Web ベースのインタラクティブなサンプルが起動します。この時点で、予算が限られていて 12GB の GTX 3060 しか搭載していない場合は、`PYTORCH_CUDA_ALLOC_CONF` を最小値の 21 に設定していても、上記のエラーメッセージが必ず表示されます。もう手抜きはできません。Python スクリプトを書き直す必要があります。

デフォルトの web_demo.py では事前トレーニング済みの FP16 モデルが使用されており、13 GB を超えるモデルは既存の 12 GB のストレージにロードできないため、このコードを少し調整する必要があります。

INT4量子化モデルをロードするにはquantize(4)に、INT8量子化モデルをロードするにはquantize(8)に変更してください。これにより、グラフィックカードに十分なメモリが確保され、様々なダイアログを実行できるようになります。

モデルのダウンロードはweb_demo.pyの起動後にのみ実際に開始されることに注意してください。そのため、13GBのモデルのダウンロードにはかなりの時間がかかります。この作業は深夜に行うか、Xunleiなどのダウンロードツールを使用してHugging Faceからモデルを事前にダウンロードしておくこともできます。モデルについて全く知識がなく、ダウンロードしたモデルのインストール方法がわからない場合は、コード内のモデル名をTHUDM/chatglm-6b-int4に変更して、4GB未満のINT4量子化モデルをインターネットから直接ダウンロードすることもできます。古いグラフィックカードはFP16モデルを処理できないため、この方法の方がはるかに高速です。

これでWebページ経由でChatGLMと通信できるようになりましたが、これはまだ調整の始まりに過ぎません。微調整したモデルをうまくトレーニングして初めて、ChatGLMの真の旅が始まります。このようなことを試してみるには、かなりの時間と費用がかかるため、慎重に進めてください。

最後に、清華大学KEGラボの皆様に心から感謝申し上げます。彼らの研究のおかげで、より多くの人が低コストで大規模言語モデルを利用できるようになりました。