AirLLM: 弱いグラフィックス カード上の大規模な言語モデル

Written by

in

通常、700 億のパラメータを持つ大規模な言語モデルを実行するには、数十ギガバイトのビデオ メモリが必要です。 AirLLM はこの問題にもっと冷静に取り組み、別の方法を提供します。つまり、このようなモデルは、量子化、蒸留、トリミングを行わずに、わずか 4 GB のメモリを備えたビデオ カード上で実行できます。このメモでは、AirLLM がどのように機能するか、どのように使用するかを急いで説明しようとします。また、このライブラリの操作をもう少し便利にする私の小さなプロジェクト AirLLM 実験を共有します。

AirLLM とは

AirLLM は、Gavin Li によって書かれた大規模言語モデル推論用のオープンソース ライブラリです。そのアイデアはシンプルでありながら洗練されています。ライブラリは、すべてのモデルの重みをビデオ メモリに一度に保存するのではなく、一度に 1 つのレイヤーだけを GPU にロードします。ウェイトはレイヤーに分割されたシャードの形でディスクに保存され、生成中に各レイヤーが順番にロード、処理、アンロードされます。

したがって、必要なビデオ メモリの量はモデル全体のサイズではなく、そのレイヤーの 1 つのサイズに依存するということになります。そのため、70B モデルは 4 GB、671B の DeepSeek-V3 は約 12 GB、Qwen3-235B は約 3 GB に収まります。ただし、モデル自体のサイズは、ビデオ カードの機能ではなく、主にディスク容量によって制限されます。

これらのメモリの節約には速度が犠牲になります。各トークンの生成時に各レイヤーがディスクから読み取られるため、出力は遅くなり、トークンあたり約秒になります。つまり、AirLLM は、簡単なインタラクティブなチャットというよりも、そうでなければハードウェアに適合しないモデルさえも起動できる機能に重点を置いています。

インストール

ライブラリは、通常のコマンドを使用して PyPI からインストールされます。

pip install airllm

初めて起動すると、Hugging Face からモデルがダウンロードされ、レイヤーに分解されます。このプロセスは時間がかかり、多くのディスク領域を消費するため、事前に空き領域を準備する必要があります。必要に応じて、4 ビットまたは 8 ビット圧縮を有効にすることができます。その場合、ブロック量子化が重みに適用され、ディスクからのレイヤーのロード速度が約 3 倍向上しますが、精度はかなり失われます。

基本的な例

AirLLM は、Transformers の通常のモデルとほぼ同じ方法で作業できます。 Hugging Face でモデル ID を 1 回入力するだけで十分です。その後、すべてが馴染みます。

from airllm import AutoModel

MAX_LENGTH = 128
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")

input_text = ['What is the capital of United States?']

input_tokens = model.tokenizer(
    input_text,
    return_tensors="pt",
    return_attention_mask=False,
    truncation=True,
    max_length=MAX_LENGTH,
    padding=False)

generation_output = model.generate(
    input_tokens['input_ids'].cuda(),
    max_new_tokens=20,
    use_cache=True,
    return_dict_in_generate=True)

print(model.tokenizer.decode(generation_output.sequences[0]))

AutoModel クラス自体がモデル タイプを決定するため、同じ行を Llama、Qwen、DeepSeek に使用できます。また、671B パラメーターを備えた DeepSeek-V3 のようなモデルを使用すると、約 12 GB のビデオ メモリにも収まります。これが主に、このプロジェクトを魅力的なものにしています。

macOS で起動

AirLLM は CUDA だけでなく Apple Silicon でも動作します。 macOS では MLX バックエンドを使用するため、mlx と torch をインストールする必要があり、Apple チップのみをサポートします。また、小さな制限もあります。MLX 実装は Llama のようなアーキテクチャのみをサポートするため、Qwen および類似のモデルをこの方法で MacBook 上で起動することはできません。

使用例

AirLLM 実験は、大規模な言語モデルをローカルで実行するための 2 つの小さな対話型コンソール ユーティリティです。モデルをロードしてチャットを整理するために毎回同じコードを記述する必要がなくなります。

最初のツール airllm-lib-usage.py は、AirLLM ライブラリを現在の Python プロセスで直接実行します。総合カタログのモデルの番号付きリストが表示され、必要に応じて不足している依存関係がインストールされ、チャット セッションが開きます。 MLX ランタイムは macOS で使用され、torch は他のプラットフォームで使用されます。

2 番目のツール airllm-openai-server-client.py は、Docker で実行され、OpenAI 互換の API を提供する airllm-openai-server サーバーの操作に役立ちます。初めて起動すると、ユーティリティは設定を要求し、イメージを収集し、コンテナを選択して、実行中のサーバーへのストリーミング チャットを開きます。繰り返し起動すると、既存のコンテナーが見つかってそれを再利用し、モデルが再度ダウンロードされないようにモデル キャッシュを別の Docker ボリュームに保存します。

利用可能なモデルのリストは共通モジュール model_catalog.py に含まれているため、両方のツールは同じセットで動作します。チャット コマンド /help、/clear、/exit も一般的です。ソース コードと手順はリポジトリにあります。

https://github.com/zefir1990/AirLLM-experiments

注意すべきこと

最初の応答の準備には数分かかる場合があります。まず、AirLLM がモデルをダウンロードしてレイヤーに分割し、それから生成を開始します。ただし、速度も低いままです。これはメモリを節約するための意図的な妥協です。 metal-llama のようなゲート付きモデルの場合、Hugging Face の規約に同意し、アクセス トークンを渡す必要があります。ダウンロードしたモデルとシャードのキャッシュは削除しないことが最善です。削除しないと、すべてを再度ダウンロードする必要があります。

リンク

https://github.com/lyogavin/airllm
https://github.com/mkamranr/airllm-openai-server
https://github.com/zefir1990/AirLLM-experiments
https://pypi.org/project/airllm/
https://huggingface.co/

ソース

https://github.com/lyogavin/airllm
https://github.com/zefir1990/AirLLM-experiments

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

DemensDeum
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.