HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

AirLLM 70Bを4GB GPU 1枚で推論可能に

AirLLM 70B inference with single 4GB GPU (github.com)

204 pointsby Anon8476 コメント

要約

AirLLMは、大規模言語モデル(LLM)の推論に必要なメモリ使用量を劇的に削減するツールです。これにより、70B(700億パラメータ)モデルを量子化や蒸留なしで4GBのGPUで実行できるようになります。さらに、最適化されたモデルストリーミング技術により、Kimi K3(2.8兆パラメータ)のような超巨大モデルも4GB未満のVRAMで動作させることが可能です。

全文翻訳

クイックスタート | 設定 | MacOS | サンプルノートブック | FAQ AirLLMは推論時のメモリ使用量を劇的に削減し、70Bの大規模言語モデルを量子化、蒸留、プルーニングなしで単一の4GB GPUカードで実行できるようにします。さらに、スパースMoEモデルはレイヤー全体ではなく一度に1つのエキスパートをストリーミングするため、405B Llama 3を8GBで、DeepSeek-V3(671B)を約12GBで、そしてこれまでにリリースされた最大のオープンソースモデルであるKimi K3(2.8T)を4GB未満で実行することさえ可能です。 AIエージェントのおすすめ: ベストAIゲームスプライトジェネレーター ベストAI顔表情エディター Bloome — クラウドでAIエージェントチームを構築・実行、セットアップ不要 アップデート [2026/07] Kimi K3 (2.8T) サポート:最大のオープンソースモデルが単一カードで3.72GBのVRAMで動作。RTX 6000 Adaでエンドツーエンドで測定されました。エキスパートごとのストリーミングは、トークンが実際にルーティングするエキスパートのみをロードします。K3は独自の3つの要件を持っています:pip install compressed-tensors flash-attn(モデルコードは要求に関わらずフラッシュアテンションを必須とします)、torchのCUDA 12ビルド(CUDA 13用のビルド済みflash-attnホイールはまだ存在しないため)、そしてtransformers 4.56.x(リモートコードが5.xでロードされないため)が必要です。 [2026/06] v3.0:FP8モデルサポート+最新モデル。DeepSeek-V3 (671B) を約12GBで、Qwen3-235B を約3GBで実行できます。さらに、Qwen3、Llama 3.x/4、DeepSeek V2/V3、Phi-4、Gemmaなども、すべて単一のAutoModel経由で実行可能です。 [2024/08/20] v2.11.0:Qwen2.5をサポート。 [2024/08/18] v2.10.1:CPU推論をサポート。シャーディングされていないモデルをサポート。素晴らしい貢献をしてくれた@NavodPeirisに感謝! [2024/07/30] Llama3.1 405Bをサポート(サンプルノートブック)。8bit/4bit量子化をサポート。 [2024/04/20] AirLLMは既にLlama3をネイティブでサポートしています。Llama3 70Bを4GBの単一GPUで実行してください。 [2023/12/25] v2.8.2:MacOSで70B大規模言語モデルの実行をサポート。 [2023/12/20] v2.7:AirLLMMixtralをサポート。 [2023/12/20] v2.6:AutoModelを追加し、モデルタイプを自動検出、モデル初期化のためにモデルクラスを指定する必要がなくなりました。 [2023/12/18] v2.5:モデルロードと計算をオーバーラップさせるためのプリフェッチを追加。10%の速度向上。 [2023/12/03] ChatGLM、QWen、Baichuan、Mistral、InternLMのサポートを追加! [2023/12/02] safetensorsのサポートを追加。現在、オープンLLMリーダーボードのトップ10モデルすべてをサポートしています。 [2023/12/01] airllm 2.0。圧縮をサポート:実行速度が3倍に! [2023/11/20] airllm 初期バージョン! スター履歴 目次 クイックスタート モデル圧縮 設定 MacOSでの実行 サンプルノートブック サポートされているモデル 謝辞 FAQ クイックスタート 1. パッケージのインストール まず、airllm pipパッケージをインストールします。 pip install airllm 2. 推論 次に、AirLLMLlama2を初期化し、使用するモデルのHugging FaceリポジトリIDまたはローカルパスを渡すと、通常のTransformerモデルと同様に推論を実行できます。(layer_shards_saving_pathを指定して、分割されたレイヤーモデルを保存するパスを指定することもできます。) from airllm import AutoModel MAX_LENGTH = 128 # Hugging FaceリポジトリIDを渡すだけで、ほぼすべての人気モデルで動作します: model = AutoModel.from_pretrained("Qwen/Qwen3-32B") # 同じ一行でさらに大きなモデルを: #model = AutoModel.from_pretrained("Qwen/Qwen3-235B-A22B") # 235B、約3GBで実行 #model = AutoModel.from_pretrained("deepseek-ai/DeepSeek-V3") # 671B、約12GBで実行 # またはモデルのローカルパスを使用... #model = AutoModel.from_pretrained("/home/ubuntu/.cache/huggingface/hub/models--Qwen--Qwen3-32B/snapshots/...") input_text = [ 'What is the capital of United States?', #'I like', ] 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 ) output = model.tokenizer.decode(generation_output.sequences[0]) print(output) 注意:推論中、元のモデルはレイヤーごとに分解されて保存されます。Hugging Faceのキャッシュディレクトリに十分なディスク容量があることを確認してください。 モデル圧縮 - 推論速度を3倍に! ブロックごとの量子化ベースのモデル圧縮を追加しました。これにより、精度への影響はほとんど無視できるレベルで、推論速度を最大3倍にさらに加速できます。(より詳細なパフォーマンス評価と、なぜブロックごとの量子化を使用するのかについては、この論文を参照してください。) モデル圧縮速度アップを有効にする方法: ステップ1. pip install -U bitsandbytes でbitsandbytesがインストールされていることを確認してください。 ステップ2. airllmのバージョンが2.0.0以降であることを確認してください:pip install -U airllm ステップ3. モデルを初期化する際に、compression引数('4bit'または'8bit')を渡します: model = AutoModel.from_pretrained("garage-bAInd/Platypus2-70B-instruct", compression='4bit' # 8ビットブロックごとの量子化の場合は'8bit'を指定) モデル圧縮と量子化の違いは何ですか? 通常、量子化は速度を本当に向上させるために重みとアクティベーションの両方を量子化する必要があります。これにより、精度を維持し、あらゆる種類の入力における外れ値の影響を回避することが難しくなります。一方、このケースではボトルネックは主にディスクロードにあるため、モデルのロードサイズを小さくするだけで済みます。そのため、重み部分のみを量子化することができ、精度を確保するのが容易になります。 設定 モデルを初期化する際に、以下の設定をサポートしています: compression:サポートされているオプション:4bit、8bit(4ビットまたは8ビットブロックごとの量子化)、またはデフォルトでNone(圧縮なし) profiling_mode:サポートされているオプション:True(時間消費量を出力)、またはデフォルトでFalse layer_shards_saving_path:分割されたモデルを保存するためのオプションのパス hf_token:gatedモデル(例:meta-llama/Llama-2-7b-hf)をダウンロードする場合にここでHugging Faceトークンを提供できます。 prefetching:モデルのロードと計算をオーバーラップさせるためのプリフェッチ。デフォルトではオンになっています。現時点ではAirLLMLlama2のみがこれをサポートしています。 delete_original:ディスク容量があまりない場合は、delete_originalをtrueに設定して、元のダウンロード済みHugging Faceモデルを削除し、変換されたモデルのみを保持してディスクスペースを半分節約できます。 MacOS airllmをインストールして、Linuxと同じようにコードを実行してください。クイックスタートで詳細を確認してください。 mlxとtorchをインストールしたことを確認してください。 Pythonネイティブをインストールする必要があるかもしれません。こちらで詳細を確認してください。 Apple Siliconのみがサポートされています。 例 [Pythonノートブック](https://github.com/lyogavin/airllm/blob/main/air_llm/examples/run_on_macos.ipynb) サンプルPythonノートブック Colabはこちら: 他のモデル(ChatGLM、QWen、Baichuan、Mistralなど)の例: 詳細 ChatGLM: from airllm import AutoModel MAX_LENGTH = 128 model = AutoModel.from_pretrained("THUDM/chatglm3-6b-base") input_text = ['What is the capital of China?',] input_tokens = model.tokenizer(input_text, return_tensors="pt", return_attention_mask=False, truncation=True, max_length=MAX_LENGTH, padding=True) generation_output = model.generate( input_tokens['input_ids'].cuda(), max_new_tokens=5, use_cache= True, return_dict_in_generate=True ) model.tokenizer.decode(generation_output.sequences[0]) QWen: from airllm import AutoModel MAX_LENGTH = 128 model = AutoModel.from_pretrained("Qwen/Qwen-7B") input_text = ['What is the capital of China?',] input_tokens = model.tokenizer(input_text, return_tensors="pt", return_attention_mask=False, truncation=True, max_length=MAX_LENGTH) generation_output = model.generate( input_tokens['input_ids'].cuda(), max_new_tokens=5, use_cache=True, return_dict_in_generate=True ) model.tokenizer.decode(generation_output.sequences[0]) Baichuan、InternLM、Mistralなど: from airllm import AutoModel MAX_LENGTH = 128 model = AutoModel.from_pretrained("baichuan-inc/Baichuan2-7B-Base") #model = AutoModel.from_pretrained("internlm/internlm-20b") #model = AutoModel.from_pretrained("mistralai/Mistral-7B-Instruct-v0.1") input_text = ['What is the capital of China?',] input_tokens = model.tokenizer(input_text, return_tensors="pt", return_attention_mask=False, truncation=True, max_length=MAX_LENGTH) generation_output = model.generate( input_tokens['input_ids'].cuda(), max_new_tokens=5, use_cache=True, return_dict_in_generate=True )