🚀 Llama-3.2-11B-Vision-Instruct-FP8-dynamic
このモデルは、多言語での商用および研究用途を目的とした、Llama-3.2-11B-Vision-Instruct の量子化バージョンです。アシスタントのようなチャットに使用できます。
🚀 クイックスタート
このモデルは、多言語の商用および研究用途に適しています。下記のセクションで、モデルの概要、最適化、デプロイ方法、作成方法などを説明します。
✨ 主な機能
- 多言語対応:英語、ドイツ語、フランス語、イタリア語、ポルトガル語、ヒンディー語、スペイン語、タイ語などの複数の言語に対応しています。
- 画像とテキストの入力:テキストと画像を入力として受け取り、テキストを出力します。
- 量子化最適化:重みと活性化関数をFP8データ型に量子化することで、ディスクサイズとGPUメモリ要件を約50%削減します。
📦 インストール
このモデルを使用するには、vLLM をインストールする必要があります。
💻 使用例
基本的な使用法
from vllm import LLM, SamplingParams
from vllm.assets.image import ImageAsset
model_name = "neuralmagic/Llama-3.2-11B-Vision-Instruct-FP8-dynamic"
llm = LLM(model=model_name, max_num_seqs=1, enforce_eager=True)
image = ImageAsset("cherry_blossom").pil_image.convert("RGB")
question = "If I had to write a haiku for this one, it would be: "
prompt = f"<|image|><|begin_of_text|>{question}"
sampling_params = SamplingParams(temperature=0.2, max_tokens=30)
inputs = {
"prompt": prompt,
"multi_modal_data": {
"image": image
},
}
outputs = llm.generate(inputs, sampling_params=sampling_params)
print(outputs[0].outputs[0].text)
高度な使用法
vllm serve neuralmagic/Llama-3.2-11B-Vision-Instruct-FP8-dynamic --enforce-eager --max-num-seqs 16
📚 ドキュメント
モデル概要
- モデルアーキテクチャ:Meta-Llama-3.2
- モデル最適化:
- 想定使用ケース:複数の言語での商用および研究用途を想定しています。Llama-3.2-11B-Vision-Instruct と同様に、アシスタントのようなチャットに使用できます。
- 範囲外の使用:適用される法律や規制(貿易コンプライアンス法を含む)に違反する方法での使用。英語以外の言語での使用。
- リリース日:2024年9月25日
- バージョン:1.0
- ライセンス:llama3.2
- モデル開発者:Neural Magic
モデル最適化
このモデルは、Llama-3.2-11B-Vision-Instruct の重みと活性化関数をFP8データ型に量子化することで得られました。この最適化により、パラメータごとのビット数が16から8に減少し、ディスクサイズとGPUメモリ要件が約50%削減されます。
トランスフォーマーブロック内の線形演算子の重みと活性化関数のみが量子化されます。対称的なチャネルごとの量子化が適用され、出力次元ごとの線形スケーリングによって、量子化された重みと活性化関数のFP8表現がマッピングされます。活性化関数は、トークンごとに動的に量子化されます。
LLM Compressor が量子化に使用されています。
デプロイ
vLLMを使用したデプロイ
このモデルは、vLLM バックエンドを使用して効率的にデプロイできます。
作成
このモデルは、LLM Compressor を適用することで作成されました。
from transformers import AutoProcessor, MllamaForConditionalGeneration
from llmcompressor.modifiers.quantization import QuantizationModifier
from llmcompressor.transformers import oneshot, wrap_hf_model_class
MODEL_ID = "meta-llama/Llama-3.2-11B-Vision-Instruct"
model_class = wrap_hf_model_class(MllamaForConditionalGeneration)
model = model_class.from_pretrained(MODEL_ID, device_map="auto", torch_dtype="auto")
processor = AutoProcessor.from_pretrained(MODEL_ID)
recipe = QuantizationModifier(
targets="Linear",
scheme="FP8_DYNAMIC",
ignore=["re:.*lm_head", "re:multi_modal_projector.*", "re:vision_model.*"],
)
SAVE_DIR = MODEL_ID.split("/")[1] + "-FP8-Dynamic"
oneshot(model=model, recipe=recipe, output_dir=SAVE_DIR)
processor.save_pretrained(SAVE_DIR)
print("========== SAMPLE GENERATION ==============")
input_ids = processor(text="Hello my name is", return_tensors="pt").input_ids.to("cuda")
output = model.generate(input_ids, max_new_tokens=20)
print(processor.decode(output[0]))
print("==========================================")
🔧 技術詳細
- 量子化アルゴリズム:LLM Compressor を使用して、重みと活性化関数をFP8データ型に量子化します。
- 量子化スキーム:対称的なチャネルごとの量子化を使用し、活性化関数はトークンごとに動的に量子化されます。
📄 ライセンス
このモデルは、llama3.2 ライセンスの下で提供されています。