モデル概要
モデル特徴
モデル能力
使用事例
🚀 Holo1-3B GGUFモデル
このモデルは、Surfer-H Meets Holo1: Cost-Efficient Web Agent Powered by Open Weightsという論文で説明されています。プロジェクトページはhttps://www.surferh.comで確認できます。
📦 インストール
このモデルは、llama.cppのコミット71bdbdb5
を使用して生成されました。
🔧 技術詳細
IQ-DynamicGateによる超低ビット量子化 (1 - 2ビット)
最新の量子化手法では、超低ビットモデル (1 - 2ビット) のために精度適応型量子化を導入しており、Llama - 3 - 8Bでのベンチマークで改善が実証されています。このアプローチでは、層ごとの戦略を使用して、極端なメモリ効率を維持しながら精度を維持します。
ベンチマークのコンテキスト
すべてのテストは、Llama - 3 - 8B - Instructを使用して行われました。
- 標準的なパープレキシティ評価パイプライン
- 2048トークンのコンテキストウィンドウ
- すべての量子化で同じプロンプトセット
方法
- 動的精度割り当て:
- 最初/最後の25%の層 → IQ4_XS (選択された層)
- 真ん中の50% → IQ2_XXS/IQ3_S (効率を向上させる)
- 重要コンポーネントの保護:
- 埋め込み/出力層はQ5_Kを使用
- 標準的な1 - 2ビット量子化と比較して、誤差伝播を38%削減
量子化性能比較 (Llama - 3 - 8B)
量子化 | 標準PPL | DynamicGate PPL | ΔPPL | 標準サイズ | DGサイズ | Δサイズ | 標準速度 | DG速度 |
---|---|---|---|---|---|---|---|---|
IQ2_XXS | 11.30 | 9.84 | -12.9% | 2.5G | 2.6G | +0.1G | 234s | 246s |
IQ2_XS | 11.72 | 11.63 | -0.8% | 2.7G | 2.8G | +0.1G | 242s | 246s |
IQ2_S | 14.31 | 9.02 | -36.9% | 2.7G | 2.9G | +0.2G | 238s | 244s |
IQ1_M | 27.46 | 15.41 | -43.9% | 2.2G | 2.5G | +0.3G | 206s | 212s |
IQ1_S | 53.07 | 32.00 | -39.7% | 2.1G | 2.4G | +0.3G | 184s | 209s |
キー:
- PPL = パープレキシティ (低いほど良い)
- ΔPPL = 標準からDynamicGateへのPPLの変化率
- 速度 = 推論時間 (CPU avx2, 2048トークンコンテキスト)
- サイズの違いは、混合量子化のオーバーヘッドを反映
主な改善点:
- IQ1_Mは、パープレキシティを43.9%大幅に削減 (27.46 → 15.41)
- IQ2_Sは、0.2GBのサイズ増加でパープレキシティを36.9%削減
- IQ1_Sは、1ビット量子化でありながら、39.7%の精度向上を維持
トレードオフ:
- すべてのバリアントで、適度なサイズの増加 (0.1 - 0.3GB)
- 推論速度は同等のまま (5%未満の差)
これらのモデルを使用するタイミング
- GPU VRAMにモデルを収める場合
- メモリに制約のあるデプロイメント
- 1 - 2ビットの誤差を許容できるCPUやエッジデバイス
- 超低ビット量子化の研究
適切なモデル形式の選択
正しいモデル形式の選択は、ハードウェアの能力とメモリの制約に依存します。
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サポートを持っていない場合 (予想よりも低速になる可能性がある)
- メモリに制約がある場合
量子化モデル (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ベースのデバイスまたは低メモリ環境に最適。
モデル形式選択のまとめ表
モデル形式 | 精度 | メモリ使用量 | デバイス要件 | 最適な使用ケース |
---|---|---|---|---|
BF16 | 最高 | 高 | BF16対応のGPU/CPU | メモリを削減した高速推論 |
F16 | 高 | 高 | FP16対応のデバイス | BF16が利用できない場合のGPU推論 |
Q4_K | 中低 | 低 | CPUまたは低VRAMデバイス | メモリに制約のある環境に最適 |
Q6_K | 中 | 中程度 | より多くのメモリを持つCPU | 量子化されたままで、より高い精度 |
Q8_0 | 高 | 中程度 | 十分なVRAMを持つCPUまたはGPU | 量子化モデルの中で最も高い精度 |
IQ3_XS | 非常に低 | 非常に低 | 超低メモリデバイス | 極端なメモリ効率と低精度 |
Q4_0 | 低 | 低 | ARMまたは低メモリデバイス | llama.cppがARMデバイス用に最適化できる |
💻 使用例
基本的な使用法
import json
import os
from typing import Any, Literal
from transformers import AutoModelForImageTextToText, AutoProcessor
# default: Load the model on the available device(s)
# We recommend enabling flash_attention_2 for better acceleration and memory saving.
model = AutoModelForImageTextToText.from_pretrained(
"Hcompany/Holo1-3B",
torch_dtype="auto",
# torch_dtype=torch.bfloat16,
# attn_implementation="flash_attention_2",
device_map="auto",
)
# default processor
processor = AutoProcessor.from_pretrained("Hcompany/Holo1-3B")
# The default range for the number of visual tokens per image in the model is 4-1280.
# You can set min_pixels and max_pixels according to your needs, such as a token range of 256-1280, to balance performance and cost.
# processor = AutoProcessor.from_pretrained(model_dir, min_pixels=min_pixels, max_pixels=max_pixels)
# Helper function to run inference
def run_inference(messages: list[dict[str, Any]]) -> str:
# Preparation for inference
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = processor(
text=[text],
images=image,
padding=True,
return_tensors="pt",
)
inputs = inputs.to("cuda")
generated_ids = model.generate(**inputs, max_new_tokens=128)
generated_ids_trimmed = [out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)]
return processor.batch_decode(generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False)
高度な使用法
画像と指示の準備
from PIL import Image
from transformers.models.qwen2_vl.image_processing_qwen2_vl import smart_resize
# Prepare image and instruction
image_url = "https://huggingface.co/Hcompany/Holo1-3B/resolve/main/calendar_example.jpg"
image = Image.open(requests.get(image_url, stream=True).raw)
# Resize the image so that predicted absolute coordinates match the size of the image.
image_processor = processor.image_processor
resized_height, resized_width = smart_resize(
image.height,
image.width,
factor=image_processor.patch_size * image_processor.merge_size,
min_pixels=image_processor.min_pixels,
max_pixels=image_processor.max_pixels,
)
image = image.resize(size=(resized_width, resized_height), resample=None) # type: ignore
構造化出力によるナビゲーション
import json
from . import navigation
task = "Book a hotel in Paris on August 3rd for 3 nights"
prompt = navigation.get_navigation_prompt(task, image, step=1)
navigation_str = run_inference(prompt)[0]
navigation = navigation.NavigationStep(**json.loads(navigation_str))
print(navigation)
# Expected NavigationStep(note='', thought='I need to select the check-out date as August 3rd and then proceed to search for hotels.', action=ClickElementAction(action='click_element', element='August 3rd on the calendar', x=777, y=282))
クリック(x, y)によるローカライゼーション
from . import localization
instruction = "Select July 14th as the check-out date"
prompt = localization.get_localization_prompt(image, instruction)
coordinates = run_inference(prompt)[0]
print(coordinates)
# Expected Click(352, 348)
構造化出力によるローカライゼーション
import json
from . import localization
instruction = "Select July 14th as the check-out date"
prompt = localization.get_localization_prompt_structured_output(image, instruction)
coordinates_structured_str = run_inference(prompt)[0]
coordinates_structured = localization.ClickAction(**json.loads(coordinates_structured_str))
print(coordinates_structured)
# Expected ClickAction(action='click', x=352, y=340)
📚 ドキュメント
モデルの説明
Holo1は、HCompanyによって開発されたAction Vision - Language Model (VLM) で、Surfer - Hウェブエージェントシステムで使用されます。人間のユーザーのようにウェブインターフェースと対話するように設計されています。
より広範なエージェントアーキテクチャの一部として、Holo1はポリシー、ローカライザー、またはバリデーターとして機能し、エージェントがデジタル環境を理解して行動するのを支援します。
オープンアクセス、合成、および自己生成データの混合でトレーニングされたHolo1は、WebVoyagerベンチマークで最先端 (SOTA) のパフォーマンスを発揮し、現在のモデルの中で最良の精度/コストトレードオフを提供します。 また、Screenspot、Screenspot - V2、[Screenspot - Pro](https://huggingface.co/datasets/likaixin/ScreenSpot - Pro)、[GroundUI - Web](https://huggingface.co/datasets/agent - studio/GroundUI - 1K)、および独自に導入したベンチマークWebClickなどのUIローカライゼーションタスクでも優れた性能を発揮します。
Holo1は、精度とコスト効率の両方を最適化しており、既存のVLMに代わる強力なオープンソースの代替手段となっています。
詳細については、論文とブログ記事を確認してください。
- 開発元:HCompany
- モデルタイプ:Action Vision - Language Model
- ファインチューニング元のモデル:Qwen/Qwen2.5 - VL - 3B - Instruct
- 論文:https://arxiv.org/abs/2506.02865
- ブログ記事:https://www.hcompany.ai/surfer - h
- ライセンス:https://huggingface.co/Hcompany/Holo1 - 3B/blob/main/LICENSE
結果
Surfer - H: WebVoyagerでのパレート最適性能
Surfer - Hは、柔軟性とモジュール性を持つように設計されています。3つの独立したコンポーネントで構成されています。
- エージェントの行動を計画、決定、駆動するポリシーモデル
- 視覚的なUIを見て理解し、正確なインタラクションを駆動するローカライザーモデル
- 回答が有効かどうかをチェックするバリデーターモデル
エージェントは行動する前に考え、メモを取り、回答が拒否された場合は再試行することができます。各モジュールに異なるモデルを使用して動作することができ、精度、速度、およびコストのトレードオフを可能にします。
WebVoyagerベンチマークでSurfer - Hを評価しました。価格の取得からニュースの検索、イベントのスケジューリングまで、643の実世界のウェブタスクが含まれています。

GPT - 4を動力とするエージェントから100%オープンなHolo1セットアップまで、複数の構成をテストしました。その中で、完全にHolo1ベースのエージェントは、精度とコストの最良のトレードオフを提供しました。
- Surfer - H + Holo1 - 7B: 92.2%の精度で、タスクあたり$0.13
- Surfer - H + GPT - 4.1: 92.0%の精度で、タスクあたり$0.54
- Surfer - H + Holo1 - 3B: 89.7%の精度で、タスクあたり$0.11
- Surfer - H + GPT - 4.1 - mini: 88.8%の精度で、タスクあたり$0.26
これにより、Holo1を動力とするエージェントはパレートフロンティアに位置し、ドルあたりの最良の精度を提供します。 カスタムAPIや脆弱なラッパーに依存する他のエージェントとは異なり、Surfer - Hは純粋にブラウザを通じて動作します。Holo1と組み合わせることで、強力で汎用的なコスト効率の高いウェブ自動化システムになります。
Holo1: 最先端のUIローカライゼーション
エージェント内のVLMの実世界での有用性にとって重要なスキルは、ローカライゼーションです。つまり、タスクを完了するためにユーザーインターフェース (UI) 上の正確な座標を特定してインタラクションする能力です。この能力を評価するために、いくつかの既存のローカライゼーションベンチマーク、Screenspot、Screenspot - V2、[Screenspot - Pro](https://huggingface.co/datasets/likaixin/ScreenSpot - Pro)、[GroundUI - Web](https://huggingface.co/datasets/agent - studio/GroundUI - 1K)、および独自に導入したベンチマークWebClickでHolo1モデルを評価しました。


モデルの使い始め方
ローカライゼーションとナビゲーションを試すための2つのスペースを提供しています。
- https://huggingface.co/spaces/Hcompany/Holo1 - Navigation
- https://huggingface.co/spaces/Hcompany/Holo1 - Localization
ローカライゼーションタスクのスターターコードを提供しています。つまり、画像 + 指示 → クリック座標です。 また、screenspot評価を再現するためのコードも提供しています。screenspot_eval.py
モデルとプロセッサーの準備
Holo1モデルはQwen2.5 - VLアーキテクチャに基づいており、transformersのサポートがあります。ここでは簡単な使用例を提供します。 モデルとプロセッサーを以下のようにロードすることができます。
テストについて
もしこれらのモデルが役に立った場合:
- 役に立った場合は「いいね」をクリックしてください!
- 量子対応のセキュリティチェックを備えたAIパワードのネットワークモニターアシスタントのテストを支援してください。
テスト方法
AIアシスタントのタイプを選択します。
TurboLLM
(GPT - 4o - mini)HugLLM
(Hugginfaceオープンソース)TestLLM
(実験的なCPU専用)
テスト内容
AIネットワークモニタリングのための小さなオープンソースモデルの限界を追求しています。具体的には:
- ライブネットワークサービスに対する関数呼び出し
- 以下のタスクを処理しながら、モデルをどれだけ小さくできるか:
- 自動化されたNmapスキャン
- 量子対応チェック
- ネットワークモニタリングタスク
TestLLM - 現在の実験的モデル (2つのCPUスレッドでのllama.cpp)
- ゼロコンフィギュレーションセットアップ
- 30秒のロード時間 (低速な推論ですが、APIコストがかからない)
- 協力者を募集しています! エッジデバイスAIに興味がある方は、一緒に協力しましょう!
その他のアシスタント
- TurboLLM - gpt - 4o - miniを使用して:
- 無料のネットワークモニターエージェントで.netコードを実行するためのカスタムコマンドプロセッサーを作成
- リアルタイムのネットワーク診断とモニタリング
- セキュリティ監査
- ペネトレーションテスト (Nmap/Metasploit)
- HugLLM - 最新のオープンソースモデル:
- Hugging Face Inference APIで実行
テストできるコマンドの例
"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からの推論の費用をすべて自前で負担しています。モデル作成と無料のネットワークモニタープロジェクトの背後にあるすべてのコードはオープンソースです。役に立つものがあれば、自由に使用してください。
もしこの仕事を評価していただける場合は、コーヒーを請うことを検討してください。あなたの支援により、サービスの費用を賄い、すべてのユーザーのトークン制限を引き上げることができます。
また、仕事の機会やスポンサーシップも歓迎しています。
ありがとうございます!
📄 ライセンス
ライセンス情報はこちらをご確認ください。
引用
BibTeX:
@misc{andreux2025surferhmeetsholo1costefficient,
title={Surfer-H Meets Holo1: Cost-Efficient Web Agent Powered by Open Weights},
author={Mathieu Andreux and Breno Baldas Skuk and Hamza Benchekroun and Emi








