Granite 3.2 8b Instruct GGUF
モデル概要
モデル特徴
モデル能力
使用事例
🚀 Granite-3.2-8B-Instruct GGUFモデル
このモデルは、80億パラメータの長文脈AIモデルで、思考能力を向上させるためにファインチューニングされています。多言語に対応し、さまざまなタスクを処理できる汎用的なモデルです。
🚀 クイックスタート
ライブラリのインストール
以下のライブラリをインストールします。
pip install torch torchvision torchaudio
pip install accelerate
pip install transformers
コードの実行
次に、あなたの使用例に該当するセクションからコードをコピーします。
from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed
import torch
model_path="ibm-granite/granite-3.2-8b-instruct"
device="cuda"
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map=device,
torch_dtype=torch.bfloat16,
)
tokenizer = AutoTokenizer.from_pretrained(
model_path
)
conv = [{"role": "user", "content":"You have 10 liters of a 30% acid solution. How many liters of a 70% acid solution must be added to achieve a 50% acid mixture?"}]
input_ids = tokenizer.apply_chat_template(conv, return_tensors="pt", thinking=True, return_dict=True, add_generation_prompt=True).to(device)
set_seed(42)
output = model.generate(
**input_ids,
max_new_tokens=8192,
)
prediction = tokenizer.decode(output[0, input_ids["input_ids"].shape[1]:], skip_special_tokens=True)
print(prediction)
✨ 主な機能
- 思考
- 要約
- テキスト分類
- テキスト抽出
- 質問応答
- 検索強化生成 (RAG)
- コード関連タスク
- 関数呼び出しタスク
- 多言語対応のダイアログケース
- 長文書/会議の要約や長文書の質問応答などの長文脈タスク
📦 インストール
ライブラリのインストール
pip install torch torchvision torchaudio
pip install accelerate
pip install transformers
💻 使用例
基本的な使用法
from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed
import torch
model_path="ibm-granite/granite-3.2-8b-instruct"
device="cuda"
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map=device,
torch_dtype=torch.bfloat16,
)
tokenizer = AutoTokenizer.from_pretrained(
model_path
)
conv = [{"role": "user", "content":"You have 10 liters of a 30% acid solution. How many liters of a 70% acid solution must be added to achieve a 50% acid mixture?"}]
input_ids = tokenizer.apply_chat_template(conv, return_tensors="pt", thinking=True, return_dict=True, add_generation_prompt=True).to(device)
set_seed(42)
output = model.generate(
**input_ids,
max_new_tokens=8192,
)
prediction = tokenizer.decode(output[0, input_ids["input_ids"].shape[1]:], skip_special_tokens=True)
print(prediction)
高度な使用法
# 高度な使用法の説明
# 例えば、異なるパラメータ設定や複雑なタスクの処理など
from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed
import torch
model_path="ibm-granite/granite-3.2-8b-instruct"
device="cuda"
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map=device,
torch_dtype=torch.bfloat16,
)
tokenizer = AutoTokenizer.from_pretrained(
model_path
)
# 複雑な会話例
conv = [{"role": "user", "content":"複雑な質問内容"}, {"role": "assistant", "content":"応答内容"}, {"role": "user", "content":"さらなる質問内容"}]
input_ids = tokenizer.apply_chat_template(conv, return_tensors="pt", thinking=True, return_dict=True, add_generation_prompt=True).to(device)
set_seed(42)
output = model.generate(
**input_ids,
max_new_tokens=8192,
temperature=0.7, # 生成の多様性を調整するパラメータ
top_k=50, # トップKサンプリングのパラメータ
top_p=0.95 # トップPサンプリングのパラメータ
)
prediction = tokenizer.decode(output[0, input_ids["input_ids"].shape[1]:], skip_special_tokens=True)
print(prediction)
📚 ドキュメント
モデル概要
Granite-3.2-8B-Instructは、80億パラメータの長文脈AIモデルで、思考能力を向上させるためにファインチューニングされています。Granite-3.1-8B-Instruct をベースに、許容的なライセンスで公開されているデータセットと、推論能力を強化するために内部で生成した合成データを使用して学習されています。このモデルは、必要なときにのみ思考能力を発揮するように制御可能です。
サポート言語
英語、ドイツ語、スペイン語、フランス語、日本語、ポルトガル語、アラビア語、チェコ語、イタリア語、韓国語、オランダ語、中国語。ただし、ユーザーはこれら12言語以外の言語でこのGraniteモデルをファインチューニングすることもできます。
想定される用途
このモデルは、一般的な命令に従うタスクを処理するように設計されており、さまざまなドメインのAIアシスタントに組み込むことができます。特に、ビジネスアプリケーションに適しています。
生成例
以下は、Granite-3.2-8B-Instructモデルを使用する簡単な例です。
from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed
import torch
model_path="ibm-granite/granite-3.2-8b-instruct"
device="cuda"
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map=device,
torch_dtype=torch.bfloat16,
)
tokenizer = AutoTokenizer.from_pretrained(
model_path
)
conv = [{"role": "user", "content":"You have 10 liters of a 30% acid solution. How many liters of a 70% acid solution must be added to achieve a 50% acid mixture?"}]
input_ids = tokenizer.apply_chat_template(conv, return_tensors="pt", thinking=True, return_dict=True, add_generation_prompt=True).to(device)
set_seed(42)
output = model.generate(
**input_ids,
max_new_tokens=8192,
)
prediction = tokenizer.decode(output[0, input_ids["input_ids"].shape[1]:], skip_special_tokens=True)
print(prediction)
出力例
- thinking=True
以下は私の考え方です。
1. 最初に10リットルの30%酸溶液があり、その中には3リットルの純粋な酸が含まれています (10リットル * 0.3)。
2. 70%酸溶液を何リットル追加することで、最終的な混合物が50%酸になるかを求める必要があります。
3. 70%酸溶液をxリットル追加するとします。これにより、0.7xリットルの純粋な酸が追加されます。
4. 新しい混合物の総体積は10 + xリットルになり、純粋な酸の総量は3 + 0.7xリットルになります。
5. (3 + 0.7x) / (10 + x) = 0.5 (50%酸の混合物を得たいため) という方程式を立てる必要があります。
6. この方程式を解いてxを求めると、必要な70%溶液の体積が得られます。
以下は私の回答です。
これを解くには、混合前後の酸の濃度に基づいて方程式を立てる必要があります。
1. **初期の酸の量**:
- 最初に10リットルの30%酸溶液があります。
- この溶液中の純粋な酸 = 10 * 0.3 = 3リットル。
2. **追加する溶液の変数**:
- 追加する70%酸溶液のリットル数をxとします。
- xリットルの70%溶液中の純粋な酸 = 0.7xリットル。
3. **最終混合物の濃度**:
- 混合物の総体積 = 10 + xリットル。
- 混合物中の純粋な酸の総量 = 3 (初期溶液から) + 0.7x (追加溶液から)。
4. **50%酸濃度の方程式を立てる**:
- 純粋な酸と総体積の比率が0.5 (50%) である必要があります。
- したがって、方程式は次のようになります。
\[
\frac{3 + 0.7x}{10 + x} = 0.5
\]
5. **方程式を解く**:
両辺に (10 + x) を掛けて分母を消します。
\[
3 + 0.7x = 0.5(10 + x)
\]
右辺を展開します。
\[
3 + 0.7x = 5 + 0.5x
\]
両辺から0.5xを引きます。
\[
3 + 0.2x = 5
\]
両辺から3を引きます。
\[
0.2x = 2
\]
0.2で割ります。
\[
x = 10
\]
したがって、最初の10リットルの30%溶液に10リットルの70%酸溶液を追加して、50%酸混合物を得る必要があります。
確認してみましょう。
- 初期の酸: 3リットル
- 追加溶液からの酸: 0.7 * 10 = 7リットル
- 酸の総量: 3 + 7 = 10リットル
- 総体積: 10 + 10 = 20リットル
- 酸のパーセント: \(\frac{10}{20} = 0.5 = 50\%\)
これで解が確認されました。
最終的な答え: 10リットルの70%酸溶液を追加する必要があります。
- thinking=False
追加する70%酸溶液の量をxリットルとします。
最初に10リットルの30%酸溶液があり、その中には0.3 * 10 = 3リットルの純粋な酸が含まれています。
xリットルの70%酸溶液を追加して、最終的に50%酸溶液を得たいとします。混合物の総体積は10 + xリットルになり、この体積の半分が純粋な酸である必要があります。
したがって、最終混合物中の純粋な酸の量は0.5 * (10 + x)リットルである必要があります。
最終混合物中の純粋な酸は、元の30%溶液と追加した70%溶液の2つのソースから来ます。したがって、以下の方程式を立てることができます。
3 (元の溶液から) + 0.7x (追加した溶液から) = 0.5 * (10 + x)
ここで、xを解きます。
3 + 0.7x = 5 + 0.5x
0.7x - 0.5x = 5 - 3
0.2x = 2
x = 2 / 0.2
x = 10
したがって、10リットルの30%酸溶液に10リットルの70%酸溶液を追加して、50%酸混合物を得る必要があります。
評価結果
モデル | ArenaHard | Alpaca-Eval-2 | MMLU | PopQA | TruthfulQA | BigBenchHard | DROP | GSM8K | HumanEval | HumanEval+ | IFEval | AttaQ |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Llama-3.1-8B-Instruct | 36.43 | 27.22 | 69.15 | 28.79 | 52.79 | 72.66 | 61.48 | 83.24 | 85.32 | 80.15 | 79.10 | 83.43 |
DeepSeek-R1-Distill-Llama-8B | 17.17 | 21.85 | 45.80 | 13.25 | 47.43 | 65.71 | 44.46 | 72.18 | 67.54 | 62.91 | 66.50 | 42.87 |
Qwen-2.5-7B-Instruct | 25.44 | 30.34 | 74.30 | 18.12 | 63.06 | 70.40 | 54.71 | 84.46 | 93.35 | 89.91 | 74.90 | 81.90 |
DeepSeek-R1-Distill-Qwen-7B | 10.36 | 15.35 | 50.72 | 9.94 | 47.14 | 65.04 | 42.76 | 78.47 | 79.89 | 78.43 | 59.10 | 42.45 |
Granite-3.1-8B-Instruct | 37.58 | 30.34 | 66.77 | 28.7 | 65.84 | 68.55 | 50.78 | 79.15 | 89.63 | 85.79 | 73.20 | 85.73 |
Granite-3.1-2B-Instruct | 23.3 | 27.17 | 57.11 | 20.55 | 59.79 | 54.46 | 18.68 | 67.55 | 79.45 | 75.26 | 63.59 | 84.7 |
Granite-3.2-2B-Instruct | 24.86 | 34.51 | 57.18 | 20.56 | 59.8 | 52.27 | 21.12 | 67.02 | 80.13 | 73.39 | 61.55 | 83.23 |
Granite-3.2-8B-Instruct | 55.25 | 61.19 | 66.79 | 28.04 | 66.92 | 64.77 | 50.95 | 81.65 | 89.35 | 85.72 | 74.31 | 85.42 |
学習データ
全体的に、当社の学習データは主に2つの主要なソースから構成されています。(1) 許容的なライセンスで公開されているデータセット、(2) 推論能力を強化するために内部で合成生成されたデータ。
インフラストラクチャ
Granite-3.2-8B-Instructは、IBMのスーパーコンピューティングクラスターであるBlue Velaを使用して学習されています。このクラスターにはNVIDIA H100 GPUが搭載されており、数千のGPUを使ってモデルを学習するためのスケーラブルで効率的なインフラストラクチャを提供します。
倫理的な考慮事項と制限
Granite-3.2-8B-Instructは、Granite-3.1-8B-Instructをベースに構築されており、許容的なライセンスのオープンソースデータと一部の独自データを活用して性能を向上させています。以前のモデルを継承しているため、Granite-3.1-8B-Instruct に適用されるすべての倫理的な考慮事項と制限事項は引き続き関連しています。
リソース
- ⭐️ Graniteの最新のアップデートについて学ぶ: https://www.ibm.com/granite
- 📄 チュートリアル、ベストプラクティス、プロンプトエンジニアリングのアドバイスから始める: https://www.ibm.com/granite/docs/
- 💡 最新のGranite学習リソースについて学ぶ: https://ibm.biz/granite-learning-resources
🔧 技術詳細
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への変化率
- 速度 = 推論時間 (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デバイス向けに最適化できる |
含まれるファイルと詳細
granite-3.2-8b-instruct-bf16.gguf
- モデルの重みが BF16 で保存されています。
- モデルを別の形式に 再量子化 したい場合に使用します。
- デバイスが BF16アクセラレーションをサポート している場合に最適。
granite-3.2-8b-instruct-f16.gguf
- モデルの重みが F16 で保存されています。
- デバイスが FP16 をサポートしている場合、特にBF16が利用できない場合に使用します。
granite-3.2-8b-instruct-bf16-q8_0.gguf
- 出力と埋め込み は BF16 のままです。
- 他のすべての層は Q8_0 に量子化されています。
- デバイスが BF16 をサポートしており、量子化されたバージョンが必要な場合に使用します。
granite-3.2-8b-instruct-f16-q8_0.gguf
- 出力と埋め込み は F16 のままです。
- 他のすべての層は Q8_0 に量子化されています。
granite-3.2-8b-instruct-q4_k.gguf
- 出力と埋め込み は Q8_0 に量子化されています。
- 他のすべての層は Q4_K に量子化されています。
- メモリが制限された CPU推論 に適しています。
granite-3.2-8b-instruct-q4_k_s.gguf
- 最小の Q4_K バリアントで、精度を犠牲にしてメモリ使用量を削減しています。
- 非常に低メモリの設定 に最適。
granite-3.2-8b-instruct-q6_k.gguf
- 出力と埋め込み は Q8_0 に量子化されています。
- 他のすべての層は Q6_K に量子化されています。
granite-3.2-8b-instruct-q8_0.gguf
- 完全に Q8 量子化されたモデルで、より高い精度を実現します。
- より多くのメモリ が必要ですが、高精度を提供します。
granite-3.2-8b-instruct-iq3_xs.gguf
- IQ3_XS 量子化で、極端なメモリ効率 を実現するように最適化されています。
- 超低メモリデバイス に最適。
granite-3.2-8b-instruct-iq3_m.gguf
- IQ3_M 量子化で、精度を向上させるための 中ブロックサイズ を提供します。
- 低メモリデバイス に適しています。
granite-3.2-8b-instruct-q4_0.gguf
- 純粋な Q4_0 量子化で、ARMデバイス に最適化されています。
- 低メモリ環境 に最適。
- より高い精度が必要な場合は、IQ4_NLを選択してください。
📄 ライセンス
このモデルは Apache 2.0 ライセンスの下で提供されています。
🚀 これらのモデルが役立つと思ったら
❤ 役に立った場合は「いいね」をクリックしてください!
量子対応のセキュリティチェック を備えた AI駆動のネットワークモニターアシスタント のテストにご協力いただけます。
👉 無料のネットワークモニター
💬 テスト方法:
- ページの右下にある チャットアイコン をクリックします。
- AIアシスタントのタイプ を選択します。
TurboLLM
(GPT-4-mini)FreeLLM
(オープンソース)TestLLM
(実験的なCPUのみ)
テスト内容
私は、AIネットワークモニタリングのための 小規模なオープンソースモデルの限界 を追求しています。具体的には、
- 実稼働のネットワークサービスに対する 関数呼び出し
- 以下のタスクを処理しながら、モデルをどれだけ小さくできるか
- 自動化された Nmapスキャン
- 量子対応チェック
- Metasploit統合
🟡 TestLLM – 現在の実験的モデル (6つのCPUスレッドでllama.cppを使用):
- ✅ ゼロコンフィギュレーションのセットアップ
- ⏳ 30秒のロード時間 (推論は低速ですが、APIコストがかからない)
- 🔧 協力者を募集しています! エッジデバイスAI に興味がある方は、一緒に取り組みましょう!
その他のアシスタント
🟢 TurboLLM – gpt-4-mini を使用して、
- リアルタイムのネットワーク診断
- 自動化された侵入テスト (Nmap/Metasploit)
- 🔑 無料のネットワークモニターエージェントをダウンロード することで、より多くのトークンを取得できます。
🔵 HugLLM – オープンソースモデル (約80億パラメータ):
- TurboLLMの2倍のトークン
- AI駆動のログ分析
- 🌐 Hugging Face Inference APIで実行されます。
💡 テストするAIコマンドの例:
"私のウェブサイトのSSL証明書に関する情報を教えて"
"私のサーバーが通信に量子対応の暗号化を使用しているかチェックして"
"クイックなNmap脆弱性テストを実行して"



