CyberSecQwen-4B: 防御的サイバーには、小規模で専門特化されたローカルで実行可能なモデルが必要な理由
なぜこれが重要なのか
フロンティアモデルは、非常に多くのことに非常に優れています。しかも呼び出しや配送が高額で、すべてのプロンプトを他人のデータセンターに送信する必要があり、現実のディフェンダーがインシデント報告の執筆で直面するややこしい例外、あなた自身のログに見つかる攻撃者グレードのペイロード、脆弱性開示のドラフトで明示的に学習して拒否するよう訓練されています。
防御的なサイバーセキュリティは、そうしたトレードオフが許される場所ではありません。
- 機密性のある証拠は社内に留まる。 漏えいした認証情報のダンプをトリアージするSOCアナリスト、サンプルを解剖するマルウェアのリバースエンジニア、CVEをまとめる脆弱性研究者――彼らの誰であっても、そのコンテンツをホストされたAPIに貼り付けるべきではありません。データそのものが侵害になり得ます。
- 1回ごとのAPIコストが積み上がる。 中規模のSOCでは、1日に何千もの低確度アラートを処理します。「このCVEを説明して」とか「ここに当てはまるCWEはどれ?」のためのホストAPIのコストが、防御の自動化を“予算の問題”へと変えてしまいます。
- エアギャップ環境や部分的に接続された環境は、例外ではなく標準です。重要インフラ、医療、政府の業務ではそうあるのが普通です。ツールがノートPCやオンプレの単一GPU上で動かないなら、そこには提供できません。
- 敵対者は、ますます自動化が進んでいる。 ランサムウェアのグループは、30の言語でフィッシング文面を下書きするためにLLMを使っています。バグバウンティの自動化担当は、エージェント型ツールを連結して、人間がレビューするよりも速くファズィング、トリアージ、エクスプロイトを行います。防御側も同じ速度で行うには、ディフェンダー自身が所有していて、実行できるモデルが必要です。
つまり、ローカルであることが重要です。しかし「ローカル」だけでは不十分です。
返却形式: {"translated": "翻訳されたHTML"}小さな 特化 モデルが、単なる小さなモデルではない理由
4つのGPUでローカルに動かす70Bの汎用モデルは「ローカル」ですが、デプロイ可能ではありません。単一のコンシューマ向けGPUでローカルに動かす4Bの汎用モデルはデプロイ可能ですが、実際にあなたがやりたい作業においては8Bの専門モデルを上回れません。
CyberSecQwen-4B に賭けているのは、絞り込まれた、評価がきちんと行われたサイバー脅威インテリジェンスのタスク――CWE分類、CVE→CWEのマッピング、構造化されたCTIのQ&A――に限れば、慎重な4Bのファインチューニングで、12GBのコンシューマ向けカードに収まる範囲で8Bの専門モデルに匹敵、あるいは上回れるということです。
私たちはこれを、見つけられる限り最も強力な公開ベースラインに対して検証しました:Ciscoの Foundation-Sec-Instruct-8B。そして、CTI-Bench において、彼らが公開している独自のプロトコルで評価しました。
| 指標(CTI-Bench、n=5、temp 0.3) | CyberSecQwen-4B | Foundation-Sec-Instruct-8B | Δ |
|---|---|---|---|
| CTI-MCQ(2,500 items) | 0.5868 ± 0.0029 | 0.4996 | +8.7 pp |
| CTI-RCM(1,000 CVE→CWE items) | 0.6664 ± 0.0023 | 0.6850 | −1.9 pp |
| パラメータ数 | 4 B | 8 B | 半分のサイズ |
CyberSecQwen-4Bは、CTI-RCMの精度でFoundation-Sec-Instruct-8Bの97.3 %を維持しつつ、パラメータ数が半分であるにもかかわらずCTI-MCQスコアを+8.7ポイント上回ります。 防御側がどれをデプロイするかを選ぶうえで、本当に気にすべき唯一の数字がこれです。
5分でわかるウォークスルー
下の5分の動画では、トレーニング手法、AMD MI300Xのワークフロー、そしてベンチマーク結果を、より視覚的な形式で説明します。すべてを詳しく読みたいのであれば、以降の投稿がまったく同じ内容を、正確な設定(コンフィグ)付きでカバーします。
なぜAMD MI300Xなのか
トレーニング、アダプタのマージ、評価までの全パイプラインは、AMD Developer Cloudを介して、単一のAMD Instinct MI300X 192 GBインスタンス上でエンドツーエンドに実行されます。192GBのHBM3とROCm 7のvLLMスタックの組み合わせにより、量子化の小細工、グラディエントチェックポイント、デバイス間でモデルを分割することについて考える必要が一切ありません。フルbf16、FlashAttention-2のforward+backward、バッチサイズ4、シーケンス長4096――すべて単一GPUで実行します。
| 構成要素 | バージョン |
|---|---|
| ハードウェア | AMD Instinct MI300X 192 GB · gfx942 |
| ROCm | 7.0 |
| Docker | vllm/vllm-openai-rocm:latest |
| PyTorch | 2.6.0 (ROCm) |
| flash-attn | 2.8.3 |
| vLLM | 0.10.1 |
| transformers / peft / trl | トレーニング時点でのlatest |
train.sh のレシピはハードウェアに依存しません。他の40GB以上のデータセンターGPUで実行するには、AMD固有の環境変数を削除してください(ほかの環境では何もしません)。そして、適切なホイールからflash-attnを再インストールします。別のスタックで姉妹モデルを学習させることで移植性を検証しました――詳細は以下をご覧ください。
学習データ
リリース用に、2つのコーパスはいずれもApache-2.0クリーン:
- 2021 CVE → CWEの対応関係:MITRE / NVDの公開記録から取得。重要なのは、CTI-Benchの評価セットとの重複は、学習の<\/em>前に重複排除(deduplicated)したため、上記のベンチマーク数値は、本当に分布外(out-of-distribution)のホールドアウトであり、汚染(contamination)ではない点です。
- 合成(シンセティック)ディフェンス・アナリストQ&A:重複排除したCVEの説明文に基づいて作成。より強力な教師(teacher)で生成し、再配布のためにApache-2.0ライセンスで提供します。
ベースモデルは Qwen3-4B-Instruct-2507 です。これはApache-2.0の命令チューニングを施した4Bで、学習時点で利用可能だった4BクラスのITモデルとして最高の性能を示していました。私たちはITのチェックポイント(ベースではない)で意図的にファインチューニングしています。こうすることで、ITパスがすでに確立していた、簡潔な回答のマルチプルチョイス形式の事前知識(priors)を保持できます。もしIT→SFTの崩壊(collapse)が起きていた場合、それは失われてしまっていたはずです。
ここには、明確に示せる効果があり、ぜひ強調したい点があります:
| モデル | CTI-RCM | CTI-MCQ |
|---|---|---|
| Qwen3-4B-Instruct-2507(生のIT) | 0.519 | 0.473 |
| CyberSecQwen-4B(今回のファインチューニング) | 0.6664 | 0.5868 |
ITベースは、下地となる学習済みベース(pre-trained base)に比べてMCQ精度を大幅に下げます。これは、CiscoがFoundation-Sec-InstructとFoundation-Secベースで報告しているのとまったく同じ「instruction-tuningがMCQを崩す(collapseする)」パターンです。私たちのファインチューニングは、両方のベンチマークでIT開始地点の性能を回復するだけでなく、上回ります。ITが損なった形式への結びつきを取り戻しつつ、ドメイン面での向上(domain lift)も同時に提供します。
レシピ
LoRA r = 64
LoRA alpha = 64 # alpha/r = 1.0
LoRA dropout = 0.05
LR = 5e-5 # cosine、ウォームアップ比 0.03
Epochs = 10
Precision = bf16
Attention = FlashAttention-2(forward + backward)
最大シーケンス長 = 4096
Batch = 4(勾配蓄積なし)
Optimizer = paged_adamw_8bit
QwenではFlashAttention-2を有効にしています。ヘッド次元(128)が、MI300X(gfx942)の共有メモリ予算にうまく収まるためです。この設定でのステップ時間は約7.85 s/stepに落ち着きます。これは同じレシピを、同梱のGemma-4-E2Bベースモデルで実行した場合と比べて約1.6×高速です。Gemma-4-E2Bベースはグローバル注意層でFA2を使えない(head_dim=512がLDS予算を超える)ため、sdpaにフォールバックします。
コンパニオンモデル:同じレシピ、異なる基盤(サブストレート)
結果が「レシピによるもの」なのか「基盤(サブストレート)に固有のもの」なのかを確認するため、姉妹モデルを学習しました。Gemma4Defense-2B です。学習コーパスとハイパーパラメータはまったく同じで、ベースモデルだけをGemma-4-E2B-itに置き換えています。
| モデル | CTI-RCM(5トライ平均 ± 標準偏差) | CTI-MCQ |
|---|---|---|
| CyberSecQwen-4B(Qwenベース) | 0.6664 ± 0.0023 | 0.5868 ± 0.0029 |
| Gemma4Defense-2B(Gemmaベース) | 0.6754 ± 0.0035 | 0.6042 ± 0.0090 |
2つのモデルは、CTI-RCMにおいて0.9ポイント以内で収束しています。レシピは持ち運べます。これは、どのファミリかというよりも、ITチェックポイントをどうファインチューニングするか、という話です。CyberSecQwen-4BはGemmaの利用規約が問題になる場合に適切で、Apache 2.0です。一方、Gemma4Defense-2Bは4Bよりも2Bのほうがデプロイ予算に余裕がある場合に適切です。
課題と修正
AMD ROCm向けのプロジェクトは、必ず「戦いの記録(ウォーストーリー)」のセクションが付いています。ここでは、私たちのものを簡略版で紹介します:
| 課題 | 修正 |
|---|---|
FA2 が Gemma-4 で失敗(head_dim=512) |
グローバル注意(global-attention)層は sdpa にフォールバック。ローカル注意(local-attention)層は引き続き FA2 を使用。 同じレシピで Qwen に比べて約 1.6× 遅い。 |
| AITER カーネルが CyberPal-2.0-20B のサービングと競合 | その特定の評価では VLLM_ROCM_USE_AITER=0 を設定。AMD の環境変数は ROCm 以外では no-op なので、レシピ内に残したままで問題ありません。 |
| bitsandbytes は ROCm で公式サポートされていない | そもそも 4bit/8bit は不要でした——192 GB あれば余裕が十分あります。paged_adamw_8bit を使用します(bnb の optimizer 専用のパスが動きます)。 |
| 評価用の vLLM ROCm + chat template | TRITON_ATTN バックエンドを使用。IT ベースのテンプレートが上書きしないように、マージ済みモデルディレクトリから chat_template.jinja を明示的に渡します。 |
| デモ用 HF-Spaces ZeroGPU クォータ | 匿名の訪問者は、IP ごとに 1日あたり 2分の上限に当たります。デモスペース(cybersecqwen-chat)は HF OAuth をクライアント側で使用しているため、各訪問者の呼び出しは 自身 のクォータに対して課金されます(無料 3.5 分/日、Pro 25 分/日)。 |
自分で試す
ライブデモ(無料クォータのためにHFでサインイン): https://huggingface.co/spaces/lablab-ai-amd-developer-hackathon/cybersecqwen-chat
モデル: https://huggingface.co/lablab-ai-amd-developer-hackathon/CyberSecQwen-4B
3行で推論(12 GB以上のGPUなら何でも):
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "lablab-ai-amd-developer-hackathon/CyberSecQwen-4B"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16, device_map="auto")
messages = [
{"role": "system", "content": "防御型のサイバーセキュリティ支援アシスタントです。まず最初に標準の CWE-ID を答え、その後に根拠となる 1〜3 文を示してください。"},
{"role": "user", "content": "ユーザーが制御した入力が File() のパスに連結される Java Web アプリでのパストラバーサルは、何の CWE ですか?"},
]
prompt = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
out = model.generate(**tok(prompt, return_tensors="pt").to(model.device), max_new_tokens=256, temperature=0.3)
print(tok.decode(out[0], skip_special_tokens=True))
高スループットのサービング用途では、vLLM は公式の vllm/vllm-openai-rocm イメージ経由で AMD MI300X でそのまま動作します。正確なサービングコマンドと固定(pin)された設定については、GitHub リポジトリを参照してください。
想定される用途
CyberSecQwen-4B は、以下に取り組むセキュリティ実務者向けに構築されています:
- CWE 分類 — 脆弱性の説明(CVEs、アドバイザリ)を MITRE CWE のカテゴリに対応付ける
- CTI Q&A — サイバーセキュリティの概念、攻撃、対策に関する構造化された質問に答える
- 防御的トリアージ支援 — CVE をトリアージし、パッチの優先順位付けを行い、脅威アクターの挙動を文書化する人間のアナリストを支援する
これは明確に次の目的のためのものではありません。エクスプロイトコードや兵器化されたPoC(概念実証)の生成、適格な人間のレビューなしでのセキュリティ判断の自動実行、法的/医療的/規制対象の助言の文脈、またはサイバーセキュリティ以外での一般的なチャット/コード生成です。このレシピは、幅広さではなく、限定された有用性のために作られました。
次は何をするか
拡張したい方向性はいくつかあります。概ね優先度順に挙げます:
- 1Bバリアント。ノートPCクラスでの展開向けです。ベースはQwen2.5-1.5BまたはLlama-3.2-1Bで、同じレシピを使い、目標は≥0.55 CTI-RCM(4Bから6pp以内)です。
- 量子化GGUFのリリース(Q4_K_M, Q5_K_M)。これによりモデルをスマホ/エッジボックス上で動かせます。Q4_K_Mでの約2.5GBなら、ARM搭載のノートPCメモリの範囲内に十分収まります。
- 継続的評価。新しいCVE-to-CWEの対応が公開されるたびに更新します。2021年のコホートは、意図的に配布上限(キャップ)を設けたものでした。今後のバージョンではNVDの増加分を追跡します。
- 敵対的(アドバーサリアル)な例への耐性。 専門モデルの良さは、最悪ケースにどれだけ強いかで決まります。CVEの説明を入力として扱う攻撃で一般的なプロンプトインジェクションのパターンに対する、強化(hardening)プロセスを公開したいと考えています。
それらのいずれかがチームの障壁を取り除くなら、GitHubリポジトリでissueを作成してください — それがキューを上げるための最速の手段です。
締めくくり
フロンティア・モデルの会話は、2年間ずっとスケール(規模)についてのものでした。防御側のサイバーの会話は、実際に必要な場所に何が収まるかについて語るべきです。サイズの半分で8Bに匹敵する4Bの専門モデル、それを研究者が確保できる1枚のカードで動かし、さらに機密性のある証拠をオンプレミス外へ送ることが決してない——それは設計空間の有用な一角であり、AMD MI300X + ROCm 7 + Hugging Faceの学習スタックによって、1回の学習ランでその一角を占められるようになりました。
デモを試し、モデルカードを読み、issueを提出してください。これまで試していない何かにレシピが移植できるなら、それが最も面白い次のデータポイントになります。
— athena129 · AMD Developer Hackathon submission