モデル概要
モデル特徴
モデル能力
使用事例
🚀 llama-joycaption-beta-one-hf-llava GGUFモデル
このモデルは画像キャプショニング用のVisual Language Model (VLM)で、Diffusionモデルのトレーニングに無料でオープンな形で利用できます。
🚀 クイックスタート
JoyCaptionは、画像キャプショニング用のVisual Language Model (VLM)です。Diffusionモデルのトレーニングに使用できる無料でオープンなモデルとして構築されています。詳細はGithubを参照してください。
モデルの使用例
import torch
from PIL import Image
from transformers import AutoProcessor, LlavaForConditionalGeneration
IMAGE_PATH = "image.jpg"
PROMPT = "Write a long descriptive caption for this image in a formal tone."
MODEL_NAME = "fancyfeast/llama-joycaption-beta-one-hf-llava"
# Load JoyCaption
# bfloat16 is the native dtype of the LLM used in JoyCaption (Llama 3.1)
# device_map=0 loads the model into the first GPU
processor = AutoProcessor.from_pretrained(MODEL_NAME)
llava_model = LlavaForConditionalGeneration.from_pretrained(MODEL_NAME, torch_dtype="bfloat16", device_map=0)
llava_model.eval()
with torch.no_grad():
# Load image
image = Image.open(IMAGE_PATH)
# Build the conversation
convo = [
{
"role": "system",
"content": "You are a helpful image captioner.",
},
{
"role": "user",
"content": PROMPT,
},
]
# Format the conversation
# WARNING: HF's handling of chat's on Llava models is very fragile. This specific combination of processor.apply_chat_template(), and processor() works
# but if using other combinations always inspect the final input_ids to ensure they are correct. Often times you will end up with multiple <bos> tokens
# if not careful, which can make the model perform poorly.
convo_string = processor.apply_chat_template(convo, tokenize = False, add_generation_prompt = True)
assert isinstance(convo_string, str)
# Process the inputs
inputs = processor(text=[convo_string], images=[image], return_tensors="pt").to('cuda')
inputs['pixel_values'] = inputs['pixel_values'].to(torch.bfloat16)
# Generate the captions
generate_ids = llava_model.generate(
**inputs,
max_new_tokens=512,
do_sample=True,
suppress_tokens=None,
use_cache=True,
temperature=0.6,
top_k=None,
top_p=0.9,
)[0]
# Trim off the prompt
generate_ids = generate_ids[inputs['input_ids'].shape[1]:]
# Decode the caption
caption = processor.tokenizer.decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)
caption = caption.strip()
print(caption)
vLLMの使用例
vllm serve fancyfeast/llama-joycaption-beta-one-hf-llava --max-model-len 4096 --enable-prefix-caching
VLMsはvLLM上で少し扱いにくい場合があり、vLLMはメモリを大量に消費するため、特定の環境に合わせて設定を調整する必要がある場合があります。たとえば、eagerモードを強制したり、max-model-lenを調整したり、gpu_memory_utilizationを調整したりすることができます。
✨ 主な機能
- 無料でオープン:常に無料で公開され、オープンな重みを持ち、制限がなく、bigASPのように、トレーニングスクリプトや構築方法の詳細が提供されます。
- 無制限:SFWとNSFWの概念を平等にカバーし、制限がありません。
- 多様性:デジタルアート、写実、アニメ、ファーリーなど、あらゆる画像スタイル、コンテンツ、民族性、性別、性的指向をカバーします。
- 最小限のフィルタリング:大量の画像でトレーニングされているため、世界のほぼすべての側面を理解することができます。ただし、違法なコンテンツはトレーニングに使用されません。
📚 ドキュメント
モデル生成詳細
このモデルは、llama.cppのコミット5787b5da
で生成されました。
インマトリックスを超えた量子化
標準のインマトリックスでは低ビット量子化やMOEモデルでの性能が十分でないことがわかったため、新しい量子化方法をテストしています。llama.cppの--tensor-type
を使用して、選択したレイヤーを強化することで、精度を向上させることができます。詳細はLayer bumping with llama.cppを参照してください。
この方法ではモデルファイルが大きくなる場合がありますが、特定のモデルサイズでの精度が向上します。この方法の性能についてフィードバックを提供していただけると助かります。
適切なモデル形式の選択
適切なモデル形式の選択は、ハードウェア能力とメモリ制限に依存します。
BF16 (Brain Float 16) – BF16アクセラレーションが利用可能な場合に使用
- 高速な計算を可能にする16ビット浮動小数点数形式で、精度も良好です。
- FP32と同様のダイナミックレンジを提供し、メモリ使用量が少なくなります。
- ハードウェアがBF16アクセラレーションをサポートしている場合に推奨されます(デバイスの仕様を確認してください)。
- FP32と比較して、メモリ使用量を削減しながら、高性能な推論に適しています。
BF16を使用する場合:
- ハードウェアがネイティブのBF16サポートを持っている場合(たとえば、新しいGPUやTPU)。
- メモリを節約しながら、より高い精度が必要な場合。
- モデルを別の形式に再量子化する予定がある場合。
BF16を避ける場合:
- ハードウェアがBF16をサポートしていない場合(FP32にフォールバックし、低速になる可能性があります)。
- 古いデバイスとの互換性が必要な場合(BF16最適化がない場合)。
F16 (Float 16) – BF16よりも広くサポートされている
- 16ビット浮動小数点数形式で、高精度ですが、BF16よりも値の範囲が狭くなります。
- ほとんどのデバイスでFP16アクセラレーションをサポートしています(多くのGPUや一部のCPUを含む)。
- BF16よりも数値精度がやや低いですが、推論には一般的に十分です。
F16を使用する場合:
- ハードウェアがFP16をサポートしているが、BF16をサポートしていない場合。
- 速度、メモリ使用量、精度のバランスが必要な場合。
- GPUや他のFP16計算に最適化されたデバイスで実行する場合。
F16を避ける場合:
- デバイスがネイティブのFP16サポートを持っていない場合(予想よりも低速になる可能性があります)。
- メモリ制限がある場合。
ハイブリッド精度モデル (たとえば、bf16_q8_0
, f16_q4_K
) – 両方の長所を兼ね備えた
これらの形式は、非必須のレイヤーを選択的に量子化し、キーレイヤーを完全な精度で保持します(たとえば、注意レイヤーや出力レイヤー)。
bf16_q8_0
のように命名され、「完全精度のBF16コアレイヤー + 量子化されたQ8_0の他のレイヤー」を意味します。- メモリ効率と精度のバランスをとり、完全に量子化されたモデルよりも改善され、BF16/F16の全メモリを必要としません。
ハイブリッドモデルを使用する場合:
- 量子化のみのモデルよりも高い精度が必要で、すべての部分で完全なBF16/F16を使用することができない場合。
- デバイスが混合精度推論をサポートしている場合。
- 制約のあるハードウェアでの本番グレードのモデルのトレードオフを最適化したい場合。
ハイブリッドモデルを避ける場合:
- ターゲットデバイスが混合または完全精度のアクセラレーションをサポートしていない場合。
- 非常に厳しいメモリ制限の下で動作する場合(この場合は完全に量子化された形式を使用します)。
量子化モデル (Q4_K, Q6_K, Q8, など) – CPUと低VRAM推論用
量子化は、モデルサイズとメモリ使用量を削減しながら、可能な限り精度を維持します。
- 低ビットモデル (Q4_K) – 最小限のメモリ使用量に最適ですが、精度が低くなる場合があります。
- 高ビットモデル (Q6_K, Q8_0) – より高い精度を提供しますが、より多くのメモリを必要とします。
量子化モデルを使用する場合:
- CPUで推論を実行し、最適化されたモデルが必要な場合。
- デバイスのVRAMが少なく、完全精度のモデルをロードできない場合。
- 合理的な精度を維持しながら、メモリ使用量を削減したい場合。
量子化モデルを避ける場合:
- 最大の精度が必要な場合(完全精度のモデルの方が適しています)。
- ハードウェアに十分なVRAMがあり、より高精度の形式(BF16/F16)を使用できる場合。
超低ビット量子化 (IQ3_XS, IQ3_S, IQ3_M, Q4_K, Q4_0)
これらのモデルは、非常に高いメモリ効率を実現するように最適化されており、低電力デバイスや大規模なデプロイメントでメモリが重要な制約となる場合に最適です。
-
IQ3_XS:超低ビット量子化(3ビット)で、非常に高いメモリ効率を実現します。
- 使用ケース:Q4_Kでも大きすぎる超低メモリデバイスに最適です。
- トレードオフ:高ビット量子化と比較して、精度が低くなります。
-
IQ3_S:最大のメモリ効率を実現するための小さなブロックサイズを持ちます。
- 使用ケース:IQ3_XSが過度に制限的である低メモリデバイスに最適です。
-
IQ3_M:IQ3_Sよりも精度が高い中程度のブロックサイズを持ちます。
- 使用ケース:IQ3_Sが制限的である低メモリデバイスに適しています。
-
Q4_K:ブロック単位の最適化により、精度が向上した4ビット量子化です。
- 使用ケース:Q6_Kでも大きすぎる低メモリデバイスに最適です。
-
Q4_0:純粋な4ビット量子化で、ARMデバイス用に最適化されています。
- 使用ケース:ARMベースのデバイスや低メモリ環境に最適です。
超超低ビット量子化 (IQ1_S IQ1_M IQ2_S IQ2_M IQ2_XS IQ2_XSS)
- 超超低ビット量子化(1または2ビット)で、非常に高いメモリ効率を実現します。
- 使用ケース:非常に制限されたメモリにモデルを収める必要がある場合に最適です。
- トレードオフ:非常に低い精度で、期待どおりに機能しない場合があります。使用前に十分にテストすることをお勧めします。
モデル形式選択の概要表
モデル形式 | 精度 | メモリ使用量 | デバイス要件 | 最適な使用ケース |
---|---|---|---|---|
BF16 | 非常に高い | 高い | BF16をサポートするGPU/CPU | メモリを削減しながら、高速な推論 |
F16 | 高い | 高い | FP16をサポートするGPU/CPU | BF16が利用できない場合の推論 |
Q4_K | 中程度 - 低い | 低い | CPUまたは低VRAMデバイス | メモリ制限のある推論 |
Q6_K | 中程度 | 適度 | より多くのメモリを持つCPU | 量子化によるより高い精度 |
Q8_0 | 高い | 適度 | 適度なVRAMを持つGPU/CPU | 量子化モデルの中で最も高い精度 |
IQ3_XS | 低い | 非常に低い | 超低メモリデバイス | 最大のメモリ効率、低い精度 |
IQ3_S | 低い | 非常に低い | 低メモリデバイス | IQ3_XSよりも少し使いやすい |
IQ3_M | 低 - 中程度 | 低い | 低メモリデバイス | IQ3_Sよりも高い精度 |
Q4_0 | 低い | 低い | ARMベース/組み込みデバイス | Llama.cppがARM推論用に自動的に最適化されます |
超超低ビット (IQ1/2_*) | 非常に低い | 非常に低い | 小型のエッジ/組み込みデバイス | 非常に制限されたメモリにモデルを収める、低い精度 |
ハイブリッド (たとえば、bf16_q8_0 ) |
中程度 - 高い | 中程度 | 混合精度推論をサポートするハードウェア | パフォーマンスとメモリのバランス、重要なレイヤーでのFPに近い精度 |
🔧 技術詳細
ベースモデル
- meta-llama/Llama-3.1-8B-Instruct
- google/siglip2-so400m-patch14-384
タグ
- captioning
パイプラインタグ
image-text-to-text
ライブラリ名
transformers
📄 ライセンス
ドキュメントにライセンス情報が記載されていないため、このセクションは省略されています。
追加情報
モデルのテストに関する情報
これらのモデルが役に立つと思われる場合は、量子対応のセキュリティチェックを備えたAI駆動の無料ネットワークモニターアシスタントのテストを手伝ってください。
無料ネットワークモニターサービスの完全なオープンソースコードは、私のGitHubリポジトリ(NetworkMonitorという名前のリポジトリ)で入手できます:無料ネットワークモニターのソースコード。モデルを自分で量子化する場合は、使用しているコードもGGUFModelBuilderで見つけることができます。
テスト方法
AIアシスタントのタイプを選択してください:
TurboLLM
(GPT-4.1-mini)HugLLM
(Hugginfaceオープンソースモデル)TestLLM
(実験的なCPU専用)
テスト内容
AIネットワークモニタリング用の小さなオープンソースモデルの限界を追求しています。具体的には:
- ライブネットワークサービスに対する関数呼び出し
- 以下のタスクを処理しながら、モデルをどれだけ小さくできるか:
- 自動化されたNmapセキュリティスキャン
- 量子対応チェック
- ネットワークモニタリングタスク
TestLLM – 現在の実験的モデル (huggingface docker spaceで2つのCPUスレッドでllama.cppを使用)
- ゼロコンフィギュレーションセットアップ
- 30秒のロード時間(低速な推論ですが、APIコストがかからない)。コストが低いため、トークン制限がありません。
- 協力者募集中! エッジデバイスAIに興味がある方は、一緒に協力しましょう!
他のアシスタント
-
TurboLLM – gpt-4.1-mini を使用:
- 非常に良好な性能を発揮しますが、残念ながらOpenAIはトークンごとに料金を請求します。そのため、トークンの使用量に制限があります。
- 無料ネットワークモニターエージェントで.NETコードを実行するためのカスタムコマンドプロセッサを作成します。
- リアルタイムのネットワーク診断とモニタリング
- セキュリティ監査
- ペネトレーションテスト(Nmap/Metasploit)
-
HugLLM – 最新のオープンソースモデル:
- Hugging Face Inference APIで実行されます。Novitaにホストされている最新のモデルを使用して、非常に良好な性能を発揮します。
テストできるコマンドの例
"Give me info on my websites SSL certificate"
"Check if my server is using quantum safe encyption for communication"
"Run a comprehensive security audit on my server"
"Create a cmd processor to .. (what ever you want)"
ただし、.NETコードを実行するには、無料ネットワークモニターエージェントをインストールする必要があります。これは非常に柔軟で強力な機能ですが、注意して使用してください!
最後の言葉
これらのモデルファイルを作成し、無料ネットワークモニターサービスを実行し、NovitaとOpenAIからの推論にかかるサーバーの費用はすべて私の負担です。モデル作成と無料ネットワークモニタープロジェクトの背後にあるすべてのコードはオープンソースです。役に立つものがあれば、自由に使用してください。
もしこの作業を評価していただける場合は、コーヒーを買ってくれることをご検討ください。あなたの支援により、サービスの費用を賄うことができ、すべての人のトークン制限を引き上げることができます。
また、仕事の機会やスポンサーシップも歓迎しています。
ありがとうございます!








