Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

GPU無し、コンテナもPythonも使わない、RAM=8GBのLinux PCでGPT - alpaca.cpp編


2023年03月29日 - Windowsユーザー宛

この投稿では、検証環境にClear Linuxを用いている。Windows環境の場合については、次の投稿を参照してほしい。
impsbl.hatenablog.jp

本文

前回の投稿*1で示されたパフォーマンスは、1トークンの推論に1分を要する、とても実用に適さないものだった。今回は違う。使用する言語モデルのファイル・サイズは4GBだ。これがswapを用いず、完全にRAMに乗ることで、RAM=8GBの普及機レベルのPCでも、いわゆるChatGPT的な機能を実用レベルで実行できる。

使用するプログラムとモデルが異なるだけで、作業手順は前回と変わらない。この投稿では、"rupeshs/alpaca.cpp"*2を用いて、その導入手順を紹介する。

検証環境も前回と変わりない。次の環境を用いてる。

次のスペックの環境で検証している。

OS Clear Linux 38590*3
CPU Intel Core i5-8250U
RAM 8GB
Storage SSD: 256GB

chatのビルド、インストール

cmakeとmakeを搭載しているLinux環境であれば、簡単にchatをビルド、インストールできる。GitHubページに掲載されているように、

  1. ソースコードをダウンロードする
  2. ディレクトリを作る
  3. cmake、makeの実行

を順番にコマンド実行すればよい。"alpaca.cpp"をホーム・ディレクトリにダウンロードし、"chat"だけをビルドするには、次のコマンドを実行する。"chat"がディレクトリ"~/alpaca.cpp/build/bin/へ出力される。

cd ~
git clone https://github.com/rupeshs/alpaca.cpp
cd alpaca.cpp
mkdir build
cd build
cmake ..
make chat

Alpaca 7Bモデルのダウンロード

モデルのサイズは4GBだ。このサイズのファイルをダウンロードするために、GitHubページでは、次の方法が提示されている。

github.com

各自お好みの方法でダウンロードすればよいと思う。私の場合、PCへのダウンロードにはBitTorrentを用いた。ダウンロードしたモデルは、"chat"と同じフォルダ、"~/alpaca.cpp/build/bin/"へ保存する。

"chat"の実行

"chat"を実行する前に、そのオプションの一部について触れておく。これらは"utils.cpp"に定義されている。

-n トークン数token
言うなれば、返答の単語数
-s 乱数シード
-t 処理スレッド数

もし8コア搭載CPUの全コアを用いて"chat"を動作させるなら、コマンドは次のようになる。

cd ~/alpaca.cpp/build/bin
./chat -t 8

動作中のhtopは、このような状態を示している。CPUはほぼ全力だが、RAMには余裕があることが確認できる。

モデルの小ささから、不整合や正確さには目をつぶるとしても、雑学的な質問への回答、指定したプログラム出力、人工無能的チャットまで、第8世代i5、RAM=8GBの環境でも、どんどん返答が返ってくるのは衝撃的だ。
この投稿の冒頭画像が、人工無能的チャットの状態を示しており、
次の画像がそれぞれ「アルパカ」について尋ね、JavaScriptでのプログラム出力を依頼したものだ。

Google Colabで実行する

"chat"はGoogle Colab*4でも実行できるのだが、そのパフォーマンスは第8世代i5の環境より劣るものだった。次のコマンドでインストール、実行することができる。

!git clone https://github.com/rupeshs/alpaca.cpp
%cd /content/alpaca.cpp
%mkdir build
%cd build
!cmake ..
!make chat

!curl -o ggml-alpaca-7b-q4.bin -C - https://gateway.estuary.tech/gw/ipfs/QmQ1bf2BTnYxq73MFJWu1B7bQ2UD6qG7D7YDCxhTndVkPC

!./chat