Nemotron 3.5 Lightning を Hermes Agent で動かして実効コストを測ってみた

Nemotron 3.5 Lightning を Hermes Agent で動かして実効コストを測ってみた

NVIDIAの新モデル「Nemotron 3.5 Lightning」をFireworks AI経由でHermes Agentに接続し、実装コストを測定しました。単価は最安クラスですが、エージェントの迷走によるターン数増加で、探索タスクでは従来モデルより高額になる場合も。定型ジョブか対話かで使い分けが必須です。
2026.08.12

はじめに

こんにちは、クラスメソッド製造ビジネステクノロジー部の嶋田です。

本日、NVIDIA が Nemotron 3.5 Lightning を公開し、Fireworks AI にも追加されました。

https://app.fireworks.ai/models/fireworks/nemotron-lightning-3p5-30b-a3b

nemotron-lightning-3p5-30b-a3b は長時間動くエージェント向けを謳うモデルで、目を引くのは価格です。
入力 100 万トークンあたり 0.05 ドル、出力 0.20 ドル。
Fireworks のサーバーレスでは最安クラスに位置します。

私は以前、常駐型のエージェントの Hermes Agent を Fireworks のオープンモデルで動かす記事を書きました。

https://dev.classmethod.jp/articles/reona-hermes-agent-fireworks-slack/

その記事の結びで、コストは測っていないと書きました。
毎朝の定型処理に安いモデルを充てるという判断は、実際の消費量を見てから評価すべきものです。
ちょうど「安さ」を看板にしたモデルが出てきたので、この宿題を回収することにしました。

なお同じモデルについては、DGX Spark 上でのローカル実行という切り口で既に 2 本の記事が出ています。

https://dev.classmethod.jp/articles/dgx-spark-nemotron-3-5-lightning-first-touch/

https://dev.classmethod.jp/articles/nvidia-nemotron-3-5-lightning-dspark-dflash-mtp-dgx-spark/

本記事はサーバーレス API 経由で、エージェントの常駐モデルとして使えるかどうかを見ます。
結論を先に書くと、単価の安さは実効コストの安さと同じではありませんでした
タスクの性質によって、既に使っていたモデルより安くなる場合と、9.7 倍高くつく場合の両方が出ました。

Nemotron 3.5 Lightning の位置づけ

モデルページの記載を整理します。

  • 32B パラメータのうち 3B がアクティブな MoE。NVIDIA Nemotron-H ファミリー
  • Mamba-Transformer のハイブリッド構成で、投機的デコーディングヘッドを持つ
  • 推論トレースを生成してから最終応答を返す
  • context 262k、ツール呼び出し対応

投機的デコーディングの効果はローカル環境での測定が本題になるので、先行記事に譲ります。
API 経由で使う側から見て重要なのは、思考してから答えるモデルであること、そして context が 262k であることです。
Fireworks の主要モデルの多くが 1M を持つので、そこは控えめな部類になります。

単価を並べてみます。100 万トークンあたりの USD で、Standard tier の値です。

モデル 入力 キャッシュ入力 出力
nemotron-lightning-3p5-30b-a3b 0.05 0.01 0.20
gpt-oss-20b 0.07 0.035 0.30
deepseek-v4-flash-0731 0.14 0.028 0.28
gpt-oss-120b 0.15 0.015 0.60
minimax-m3 0.30 0.06 1.20
nemotron-3-ultra-nvfp4 0.60 0.12 2.40
glm-5p2 1.40 0.14 4.40
kimi-k3 3.00 0.30 15.00

前回から既定モデルにしている deepseek-v4-flash-0731 と比べると、入力が 1/2.8、出力が 1/1.4 です。
以降はこの 2 モデルを比較していきます。

つないでみる

まず素の API で疎通を確認しました。

ここで 1 つ気になる点がありました。
GET /v1/models の応答が、このモデルについて supports_chat: false を返すのです。

{
  "id": "accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b",
  "kind": "HF_BASE_MODEL",
  "supports_chat": false,
  "supports_tools": true,
  "context_length": 262144
}

ところが実際に chat/completions を叩くと 200 が返ります。

$ curl -s https://api.fireworks.ai/inference/v1/chat/completions \
    -H "Authorization: Bearer $FW" -H 'Content-Type: application/json' \
    -d '{"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b",
         "messages":[{"role":"user","content":"Reply with exactly: PONG"}],"max_tokens":256}'
{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "PONG",
        "reasoning_content": "Here's a thinking process:\n\n1. **Analyze User Input**..."
      }
    }
  ],
  "usage": { "prompt_tokens": 22, "completion_tokens": 184 }
}

応答は 1.0 秒でした。
カタログのフラグを信じてモデル選択を自動化していると、候補から漏れることになります。
明示的に指定すれば使えます。

注目したいのは usage です。
contentPONG の 4 文字ですが、completion_tokens は 184 あります。
差分は reasoning_content に入った思考です。
つまり思考トークンは出力トークンとして課金されます
ツール呼び出しも同じ形式で成立し、finish_reason: tool_calls と正しい JSON が返りました。

Hermes 側の指定は、前回と同じく provider と model を分けて渡します。
Fireworks のモデル ID 自体がスラッシュを含むため、連結形式では通りません。

$ hermes -z 'Reply with exactly: PONG' \
    --provider fireworks -m accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b
PONG

コストを測る準備

Hermes には --usage-file というグローバルオプションがあり、セッションの使用量を JSON に書き出せます。

$ hermes -z '...' --usage-file usage.json
{
  "estimated_cost_usd": 0.0,
  "cost_status": "unknown",
  "cost_source": "none",
  "input_tokens": 15067,
  "output_tokens": 93,
  "cache_read_tokens": 14992,
  "reasoning_tokens": 0,
  "api_calls": 2
}

トークンは取れましたが、コストが 0 です。
cost_statusunknown になっています。

調べると、Hermes は Fireworks の価格表を内蔵していました。
agent/usage_pricing.py("fireworks", <モデル名>) をキーとする辞書があり、pricing_versionfireworks-pricing-2026-07 です。

つまり 7 月時点のスナップショットなので、本日出たモデルは載っていません。
~/.hermes/models_dev_cache.json の Fireworks エントリ(17 件)にも Nemotron はありませんでした。

ここで、比較対象の deepseek-v4-flash-0731 でも unknown になることに気付きました。
こちらは 7 月より前からあるモデルです。

原因は ID の末尾でした。
価格表のキーは deepseek-v4-flash で、deepseek-v4-flash-0731 は別物として扱われます。
モデル名の正規化処理は Anthropic と Bedrock にしか適用されず、Fireworks は完全一致のみです。

サフィックスを外して実行すると、値が入りました。

model = accounts/fireworks/models/deepseek-v4-flash
cost_status = estimated
cost_source = official_docs_snapshot
estimated_cost_usd = 0.00200718

前回の記事で、私は挙動を再現しやすくするためにバージョン固定の -0731 を選びました。
その選択が、コスト表示を失うトレードオフを伴っていたわけです。

そこで自分で計算することにしました。
使用量はセッション DB(~/.hermes/state.db)の sessions テーブルにも記録されるので、そこから読みます。

PRICE = {
    "nemotron-lightning-3p5-30b-a3b": (0.05, 0.01, 0.20),
    "deepseek-v4-flash-0731": (0.14, 0.028, 0.28),
}

rows = con.execute("""
    SELECT id, model, api_call_count, input_tokens, cache_read_tokens, output_tokens
      FROM sessions WHERE started_at > strftime('%s','now') - ?
""", (7200,)).fetchall()

for sid, model, calls, inp, cache, outp in rows:
    pin, pcache, pout = PRICE[model.rsplit("/", 1)[-1]]
    cost = (inp * pin + cache * pcache + outp * pout) / 1_000_000

1 点注意があります。
input_tokens はキャッシュにヒットしなかった入力だけを表します。
cache_read_tokens とは加算関係にあり、total_tokens = input + cache_read + output が成立します。
両方を別単価で計算する必要があります。

なお reasoning_tokens は常に 0 でした。
Fireworks が思考トークンを分離報告しないためで、実体は出力トークンに含まれています。

実測 1: 単発のツール呼び出し

まず前回と同じ、ディレクトリ内の .md を数えるタスクです。

$ hermes -z 'Use your tools to count how many .md files are in the current directory. Reply with just the number.'
2
モデル calls 入力 キャッシュ入力 出力 実効コスト
nemotron 2 15,067 14,992 93 0.14 円
deepseek 2 14,291 14,169 91 0.36 円

どちらも一発で正答し、消費もほぼ同じです。
単価の差がそのまま出て、Nemotron が 2.6 分の 1 になりました。
以降の円換算はすべて 150 円/USD です。

実測 2: 毎朝の定型ジョブ

次に実運用に近いタスクを試します。
前回作った cron ジョブと同じプロンプトで、RSS を 3 本 curl して日本語 5 件に要約させるものです。

各モデル 2 回ずつ実行しました。

モデル calls 入力 キャッシュ入力 出力 実効コスト 所要
nemotron 1 回目 4 65,537 97,826 9,227 0.92 円 26.1s
nemotron 2 回目 2 65,496 15,199 14,701 0.96 円 38.8s
deepseek 1 回目 5 28,770 69,659 4,090 1.07 円 42.5s
deepseek 2 回目 3 39,015 51,163 4,978 1.24 円 52.5s

Nemotron が 20〜30% 安く、しかも速く終わりました。

興味深いのは、Nemotron の出力トークンが 2〜3 倍多いという点です。
思考してから答えるモデルなので当然ではあります。
どれくらい考えているかは、セッション DB に保存された reasoning_content の文字数で比較できます。

セッション モデル 思考の文字数
1 回目 nemotron 28,460
2 回目 nemotron 45,270
1 回目 deepseek 10,643
2 回目 deepseek 14,849

3 倍ほど考えています。
それでも総額が下回るのは、出力単価の差が小さい(0.20 対 0.28)一方で、入力単価の差が大きい(0.05 対 0.14)ためです。
エージェントの消費は、毎ターン履歴を送り直す入力側が支配的になります。
思考量の不利が、入力単価の有利で打ち消された形です。

実測 3: 探索を伴うタスクでは逆転する

ここで結果が反転しました。

前回の記事で Slack から頼んだのと同じ調査タスクを与えます。
DevelopersIO で今日投稿された NVIDIA 関連記事を調べ、タイトルと URL を日本語で答えてもらうものです。
検索 API のキーは設定していないので、ブラウザ操作か curl で自力でたどることになります。

条件 calls 入力 キャッシュ入力 出力 実効コスト 所要
deepseek 3 18,991 30,758 1,290 0.58 円 18.3s
nemotron 1 回目 22 36,483 629,099 7,569 1.44 円 61.1s
nemotron 2 回目 51 63,021 1,856,283 17,747 3.79 円 131.8s
nemotron --reasoning low 90 72,346 2,784,371 29,840 5.61 円 162.1s
nemotron -t terminal,file 19 92,440 1,025,993 7,686 2.46 円 35.2s

deepseek は 3 ターンで終わりました。
RSS フィードから 3 件を挙げ、そのうえで「NeMo Switchyard の記事はタイトルに NVIDIA が無いが関連として含めた、判断基準によっては変わる」と注記まで付けてきました。

Nemotron は 22 ターン、次の試行では 51 ターン費やしました。
コストは deepseek の 2.5 倍から 6.5 倍です。

金額よりも、ツールを呼んだ回数のほうが差を素直に表しています。

原因はターン数です。
エージェントはツールを呼ぶたびに、それまでの履歴を丸ごと送り直します。
迷走してターン数が増えると、入力トークンが二次関数的に積み上がります。

51 ターンの試行では、3.79 円のうち 2.79 円がキャッシュ入力でした。
1M あたり 0.01 ドルという、表で見れば無視できそうな単価が支配項になっています。
出力トークンの寄与は 0.53 円にすぎません。

単価表で比べられるのは 1 トークンあたりの値段だけで、エージェントの費用はターン数で決まります

品質面でも問題が出た

コストより気になったのはこちらです。
51 ターンの試行で、Nemotron は存在しない URL を出力しました

- **Canonical URL:** `https://dev.classmethod.jp/guri/hajime-oguri/nvidia-nemotron-3-5-lightning-3-speculative-decoding-dsg-dflash-mtp`
  (based on author slug structure)

「著者スラッグの構造から推定した」と自分で書いています。
しかも同じ URL を 2 件に重複させていました。

日本語で答えるよう指示したのに、冒頭が英語になる回もありました。
無人で回すジョブに URL を扱わせる用途では、これは無視できません。

思考を削っても改善しない

ターン数が問題なら思考を減らせばよいのではと考え、--reasoning low を試しました。
結果は 90 ターン、5.61 円で最悪でした。
end_reason は通常終了だったので、上限による打ち切りではありません。

考えるモデルから考える余地を奪うと、探索が発散する方向に働いたようです。
DGX Spark で検証した記事も、このモデルには十分なトークン予算(16,000 程度)が必要だと指摘しています。
API 経由でも同じ性質が出たことになります。

ツールを絞ると速くはなる

-t terminal,file でブラウザツールを外すと、51 ターンから 19 ターン、131.8 秒から 35.2 秒に改善しました。
日本語の指示も守られました。

ただし URL の捏造は起きました。
ターン数の問題と事実性の問題は別物で、前者だけ解決しても後者は残ります。

cron ジョブで実運用してみる

定型タスクなら有利という結果が出たので、cron に載せて確かめます。
ジョブ単位でモデルを固定できます。

$ hermes cron create '0 6 * * *' "<プロンプト>" --name nvidia-daily-nemotron \
    --deliver slack:C0BPS3PR13K --provider fireworks \
    --model accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b
Created job: 3d8c095ef30e

手動実行して Slack への配信を確認しました。

INFO cron.scheduler: Job '3d8c095ef30e': delivered to slack:C0BPS3PR13K

なお hermes cron pause した状態では手動実行も拒否されます。

Job is paused/disabled; resume it before running.

停止したジョブは hermes cron list の一覧から消えます。
--all を付けないと存在自体が見えないので、検証用のジョブを止めたまま忘れないよう注意が要ります。

既存ジョブとの比較です。

ジョブ モデル calls 実効コスト
nemotron 版 nemotron 4 0.94 円
既存ジョブ 1 回目 deepseek 11 1.29 円
既存ジョブ 2 回目 deepseek 2 1.37 円

32.3 秒で完走し、CLI での測定と同じ傾向が出ました。
毎日 1 回なら 30 日で 28 円程度です。

ただし出力に固有名詞の誤りがありました。
「Apollo・BlackRock ら」と書くべきところを **「Apache、BlackRockら」**としています。
1 行だけ英語が混じった行もありました。
同じジョブの deepseek 版には、この種の誤りは出ていません。

安く済むかわりに、固有名詞は疑ってかかる必要があります。
毎朝ざっと目を通すニュース要約なら許容できますが、そのまま引用する用途には向きません。

使い分けの結論

今回の実測から、次のように振り分けることにしました。

  • 定型の cron ジョブは Nemotron。手順が決まっていてターン数が読めるタスクでは、20〜30% 安く、速い
  • 対話と探索は deepseek-v4-flash。ターン数が読めないタスクでは、単価の安さがターン数の増加で打ち消され、逆に高くつく

一般化するなら、こう言えると思います。
安いモデルに任せてよいのは、エージェントに考えさせる余地が少ないタスクです。
プロンプトで手順を固定でき、使うツールを絞れて、出力形式が決まっているもの。
逆に、どう調べるかをモデルに委ねるタスクでは、単価表の順位は意味を持ちません。

おわりに

Nemotron 3.5 Lightning を Fireworks 経由で Hermes Agent につなぎ、実効コストを測りました。

分かったことを整理します。

  • 単価はサーバーレス最安クラス。定型タスクでは実測でも 20〜30% 安く、速い
  • 探索を伴う多段タスクではターン数が 3 から 22〜51 に膨らみ、実効コストが最大 9.7 倍に逆転する
  • 思考量を削っても改善しない。ツールを絞るとターン数は減るが、事実性は改善しない
  • URL や固有名詞の誤りが出る。無人で回すジョブでは出力の使い道を選ぶ必要がある
  • Hermes 内蔵の価格表は 7 月時点のスナップショットなので、新しいモデルではコスト表示が効かない。バージョン付きのモデル ID でも効かない

前回の記事では、常駐エージェントを立てて動かすところまでを書きました。
今回はそこに費用の目安が付きました。
1 日 1 円弱という水準が見えたので、ジョブを増やす判断もしやすくなりました。

確かめられていないこともあります。
Slack 経由の対話セッションを長時間続けたときの挙動は見ていません。
捏造の頻度も、探索タスク 2 回という試行数では傾向としか言えません。
長期的に運用した上での評価はどう変化が起きるのか、検証する価値がありそうです。

参考資料

この記事をシェアする

関連記事