記事のサマリー(TL;DR)
- AMD MI300X(192GB HBM3)でQwen 2.5 7Bをオンプレミス実行し、STEP形式のCADデータを外部に送信せず加工性判断を自動化
- STEPパーサー・操作分類・工具マッチング・判断・レポート生成の5コンポーネント構成で、エンドツーエンド25〜40秒
- LLMは推論が必要な3エージェントのみに限定し、DB参照など確定的処理はPythonで実装することで精度と速度を両立
製造業DXを検討する国内機械加工・ものづくり企業への示唆
製造業では顧客からのSTEPファイルにNDA対象の設計情報が含まれるケースが多く、商用APIへの送信はコンプライアンス上リスクになる。MachinaCheckはこの問題を「オンプレLLM実行」で解決したアーキテクチャの実例として参考になる。国内の中小機械加工業では、RFQ(見積依頼)の受否判断に熟練者が1件あたり30〜60分を費やしており、週10〜20件のRFQを抱える工場では週5〜20時間が feasibility 分析に消える計算だ。同様の構成は、製造ERP・MESにつながる専用UIと組み合わせることで、受注判断フローそのものをシステム化する文脈にも応用できる。また、Qwen 2.5 72BはMI300Xの192GBに収まることが示されており、より高精度な推論が必要な場面ではモデルのスケールアップも現実的な選択肢となる。
詳細
解決した課題
中小のCNC機械加工工場では、受注可否の判断プロセスはほぼ手作業だ。図面を印刷し、寸法を手で読み取り、工場内を歩いて使用可能な工具を確認し、機械が必要公差を保持できるかを経験で見積もり、クリップボードにメモする。この作業は図面1枚あたり30〜60分かかる。週10〜20件のRFQを受ける繁忙な工場では、feasibility 分析だけで週5〜20時間の熟練者工数が消費される。
判断ミスも起きる。受注して生産を始め、途中で適切なタップがないこと、あるいはミルが重要フィーチャーの公差を保持できないことに気づく。部品はスクラップになり、顧客は不満を持ち、機械稼働時間が無駄になる。MachinaCheckはこの問題を根本から解消するために開発された。
MachinaCheckの機能
MachinaCheckはマルチエージェントAIシステムだ。STEPファイル(顧客が機械加工業者に送る標準CAD形式)を、材料種・必要公差・ねじ仕様の3つの入力とともにアップロードすると、30秒後に完全な加工性レポートが得られる。
- その部品を製造できるか否か
- 必要な工具
- 不足しているもの
- 生産開始前に取るべきアクション
図面の手読み、工場内の確認、勘による判断は不要になる。
AMD MI300X上で構築した理由
これは単なる技術的選択ではなく、ビジネス要件だ。製造業顧客はNDAを締結している。STEPファイルには何年もの設計工数と数百万ドルのR&D成果を表す独自ジオメトリが含まれる。医療機器の穴パターンや航空宇宙部品のポケットジオメトリは機密の知的財産(IP)であり、これをOpenAI・Anthropic・その他の商用APIエンドポイントに送信することは機密違反に直結する。
AMD Instinct MI300Xはこの方程式を根本的に変える。192GB HBM3 VRAM・5.3 TB/sのメモリ帯域幅によって、Qwen 2.5 7B Instructを完全にオンプレミスで実行できる。STEPジオメトリはサードパーティのサーバーに送信されない。顧客のIPはあるべき場所に留まる。これが製造業における「プライバシー・バイ・デザイン」の実態だ――チェックボックスではなく、製品を実際のエンタープライズ顧客にとって成立させる根本的なアーキテクチャ上の決定だ。
エージェントアーキテクチャ
MachinaCheckはLangChainで構築され、FastAPI経由でオーケストレーションされる5コンポーネントのパイプラインを使用する。
コンポーネント1 — STEPファイルパーサー(Pure Python、LLMなし)
OpenCASCADEをベースにしたPythonライブラリ「cadquery」でSTEPファイルを直接パースする。数学的に正確なフィーチャー抽出が可能だ。
- すべての円筒穴(直径・深さ付き)
- 平面とその面積
- 面取りとフィレット
- バウンディングボックス寸法
- 総体積・表面積
ビジョンモデルもOCRも近似も使わず、数学的なジオメトリを直接読み取るため精度は100%だ。Ø6.0mmの穴は出力でも正確にØ6.0mmになる。
def extract_features(step_file_path: str) -> dict:
model = cq.importers.importStep(step_file_path)
shape = model.val()
bb = shape.BoundingBox()
holes = {}
for face in model.faces().vals():
adaptor = BRepAdaptor_Surface(face.wrapped)
if adaptor.GetType() == GeomAbs_Cylinder:
radius = adaptor.Cylinder().Radius()
diameter = round(radius * 2, 3)
holes[diameter] = holes.get(diameter, 0) + 1
return {
"bounding_box_mm": {"length": round(bb.xlen, 3), ...},
"holes": [...],
"flat_surfaces_count": len(flat_surfaces),
}
エージェント1 — 操作分類器(Qwen 2.5 7B)
抽出されたジオメトリとユーザー入力(材料・公差・ねじ)を、AMD MI300X上でvLLM経由で動作するQwen 2.5 7Bに渡す。エージェントが答えるのは「この部品を製造するために必要なCNC操作と工具は何か?」という問いだ。製造ドメイン知識を適用する。
- SUS304はカーバイド工具が必要
- 円筒穴にはエンドミルではなくドリルが必要
- ±0.005mmの公差には標準ミルではなく精密機械が必要
エージェント2 — 工具マッチャー(Pure Python)
LLMを使用しない。工場の工具在庫データベースに照会し、各必要工具と手持ちを照合する。完全な決定論的ロジック――DB参照・比較・結果のみ。DB照会にLLMは不要であり、使うと余分なレイテンシとハルシネーションリスクが増えるだけだ。
エージェント3 — 加工性判断エージェント(Qwen 2.5 7B)
マッチング結果をQwenに返す。エージェントは全体状況を推論し、構造化された判断を出力する。
{
"decision": "CONDITIONAL",
"confidence": "HIGH",
"reason": "All tools available except M10x1.5 tap",
"action_items": ["Purchase M10x1.5 tap ($15)"],
"risk_flags": ["Verify spindle speed for Steel 304"],
"estimated_setup_hours": 2.5
}
エージェント4 — レポートジェネレーター(Qwen 2.5 7B)
最後のエージェントがすべてを統合し、全体ステータス・エグゼクティブサマリー・部品分析・工具状況・機械状況・最終推奨事項を含むプロフェッショナルな加工性レポートを生成する。
AMDスタック
AMD MI300X上でROCmとvLLMを経由してQwen 2.5 7Bを実行するのは直截だった。AMD Developer CloudのvLLM Quick Startイメージにすべてが事前設定済みだ。
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2.5-7B-Instruct \
--host 0.0.0.0 \
--port 8000 \
--dtype float16 \
--gpu-memory-utilization 0.5
gpu-memory-utilization 0.5の設定で利用するVRAMは約96GB、利用可能な192GBのうち半分に留まる。エージェント呼び出しの推論レイテンシは平均3秒未満だ。
LangChainはOpenAI互換エンドポイント経由でvLLMに接続する。
from langchain_community.llms import VLLMOpenAI
llm = VLLMOpenAI(
openai_api_base="http://localhost:8000/v1",
openai_api_key="EMPTY",
model_name="Qwen/Qwen2.5-7B-Instruct",
temperature=0.1,
max_tokens=1000
)
結果
GrabCADの実際のSTEPファイルを使ったテスト結果:
| 指標 | 結果 |
|---|---|
| フィーチャー抽出(50フィーチャー以下の部品) | 1秒未満 |
| フルパイプライン(全4エージェント) | 25〜40秒(エンドツーエンド) |
| 判断精度 | テスト全部品で正確な加工性評価 |
| プライバシー | STEPジオメトリの外部送信ゼロバイト |
学んだこと
LLMは推論が必要な場所にのみ使う。 エージェント2(工具マッチング)はPure Pythonだ。そこにLLMを置けば遅く・高コストで・信頼性が低下する。DB参照には適切なツールはDBクエリだ。
構造化出力のためのプロンプトエンジニアリングは重要。 Qwenに有効なJSONを確実に出力させるには、プロンプトに明確なルールを設定する必要があった――円筒穴にはエンドミルではなくドリルが必要であること、直径は正確に一致させること、ねじが指定された場合にのみタップが登場すること、といったルールだ。
AMD MI300XはこのユースケースでRRな印象を受けた。 192GB VRAMにより、必要であればより大きなモデルも実行できる。本番デプロイではQwen 2.5 72Bが十分に収まり、推論品質が大幅に向上するだろう。
試す
- HF Space: huggingface.co/spaces/lablab-ai-amd-developer-hackathon/MachinaCheck
- GitHub: github.com/SyedMuhammadSarmad/Manufacturing-Agent
STEPファイルをアップロードするとフルパイプラインを確認できる。
使用スタック: Qwen 2.5 7B · AMD Instinct MI300X · ROCm · vLLM · LangChain · cadquery · FastAPI · Next.js · Hugging Face Spaces
2026年5月、lablab.aiのAMD Developer Hackathonで、Syed Muhammad SarmadとSabari Doss Rが開発。