Skills MCP Model 博客 提交 Skills

DeepSeek エンタープライズ向けソリューション

デプロイから運用まで、高可用性アーキテクチャ、セキュリティコンプライアンス、権限管理、ログ監査、監視アラート、災害復旧をカバー。完全なアーキテクチャ図と設定を含み、エンタープライズ向けAI導入を支援します。

ソリューションを見る

エンタープライズアーキテクチャ概要

完全なエンタープライズ向けDeepSeek推論サービスアーキテクチャ。API Gateway、ロードバランシング、モデルサービス、キャッシュ、監視、ロギングの6つの主要コンポーネントを含みます。

1.1 アーキテクチャ全体図

エンタープライズ向けDeepSeekデプロイメントはレイヤードアーキテクチャを採用しており、各レイヤーは独立してスケーラブルで置き換え可能です。主要コンポーネントは以下の通りです:

レイヤー コンポーネント 技術選定 責務
アクセス層 API Gateway Kong / APISIX / Nginx 認証・認可、レート制限、ルーティング、プロトコル変換
負荷分散層 Load Balancer Nginx / HAProxy / Envoy トラフィック分散、ヘルスチェック、セッション維持
推論層 Model Service vLLM / SGLang / Ollama モデル推論、KV Cache管理、バッチ処理
キャッシュ層 Cache Redis / Memcached セマンティックキャッシュ、セッションキャッシュ、レート制限
監視層 Monitoring Prometheus + Grafana メトリクス収集、可視化、アラート
ロギング層 Logging ELK / Loki / ClickHouse ログ収集、検索、監査、コンプライアンス

1.2 リクエストフローパス

完全なAPIリクエストのフローパス:

クライアント → DNS解決 → CDN/WAF → API Gateway(認証/レート制限)
→ Load Balancer(ヘルスチェック/ルーティング)→ Model Service(推論)
→ Cache(セマンティックキャッシュヒット時は直接返却)→ 結果返却
→ 同時にLogging(ログ)とMonitoring(メトリクス)に書き込み

1.3 アーキテクチャ設計原則

  • 高可用性:各コンポーネントは少なくとも2つのレプリカを持ち、自動フェイルオーバーを実現。
  • 拡張性:推論ノードを水平展開し、弾力的にスケーリング。
  • 可観測性:全チェーン追跡、メトリクス可視化、自動アラート。
  • セキュリティとコンプライアンス:転送時の暗号化、アクセス制御、監査ログ。
  • コスト管理:トークン計量、部門別コスト配分、予算アラート。

高可用デプロイ

マルチノードデプロイ、自動スケーリング、ヘルスチェック、フェイルオーバー戦略。DeepSeek推論サービスの99.9%可用性を確保します。

2.1 マルチノードデプロイアーキテクチャ

単一障害点を避けるため、異なる物理マシンまたはアベイラビリティゾーンに少なくとも3つの推論ノードをデプロイします:

# マルチノード vLLM デプロイ(3ノードクラスタ)
# ノード1(192.168.1.11)
python -m vllm.entrypoints.openai.api_server \
--model deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
--tensor-parallel-size 2 \
--host 0.0.0.0 --port 8000

# ノード2(192.168.1.12)
python -m vllm.entrypoints.openai.api_server \
--model deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
--tensor-parallel-size 2 \
--host 0.0.0.0 --port 8000

# ノード3(192.168.1.13)
python -m vllm.entrypoints.openai.api_server \
--model deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
--tensor-parallel-size 2 \
--host 0.0.0.0 --port 8000

2.2 ヘルスチェック設定

ロードバランサーはバックエンドサービスのヘルス状態を定期的にプローブし、障害ノードを自動的に切り離す必要があります:

# Nginx ヘルスチェック設定
upstream deepseek_cluster {
server 192.168.1.11:8000 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8000 max_fails=3 fail_timeout=30s;
server 192.168.1.13:8000 max_fails=3 fail_timeout=30s;

# アクティブヘルスチェック(nginx-plus または nginx-module が必要)
# check interval=3000 rise=2 fall=3 timeout=1000 type=http;
# check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
# check_http_expect_alive http_2xx;
}

# カスタムヘルスチェックスクリプト
# /usr/local/bin/healthcheck-vllm.sh
#!/bin/bash
for node in 192.168.1.11 192.168.1.12 192.168.1.13; do
status=$(curl -s -o /dev/null -w "%{http_code}" http://$node:8000/health)
if [ "$status" != "200" ]; then
echo "ALERT: Node $node is DOWN" | systemd-cat -t healthcheck
# アラート通知をトリガー
fi
done

2.3 フェイルオーバー戦略

障害タイプ 検出方法 復旧戦略 RTO
ノードダウン ヘルスチェックが3回失敗 自動的に切り離し、トラフィックを他のノードに切り替え < 30s
GPU OOM vLLMプロセスが終了 systemdで自動再起動、K8sでPodを自動再作成 < 60s
ネットワーク分断 ノード間のハートビートタイムアウト 隔離されたノードを切り離し、仲裁後に復旧 < 10s
アベイラビリティゾーン全体の障害 複数ノードが同時に到達不能 DNSをバックアップのアベイラビリティゾーンに切り替え < 5min

2.4 Kubernetes HA設定

# deepseek-ha-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deepseek-vllm
namespace: deepseek
spec:
replicas: 3
selector:
matchLabels:
app: deepseek-vllm
template:
metadata:
labels:
app: deepseek-vllm
spec:
# Podアンチアフィニティ:Podを異なるノードに分散させる
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- deepseek-vllm
topologyKey: kubernetes.io/hostname
# グレースフル終了:現在のリクエストを処理するためにPodに30秒与える
terminationGracePeriodSeconds: 30
containers:
- name: vllm
image: vllm/vllm-openai:latest
ports:
- containerPort: 8000
resources:
requests:
nvidia.com/gpu: 2
memory: "64Gi"
limits:
nvidia.com/gpu: 2
memory: "80Gi"
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 120
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 60
periodSeconds: 5
failureThreshold: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1

2.5 自動スケーリング(HPA)

# deepseek-hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: deepseek-vllm-hpa
namespace: deepseek
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: deepseek-vllm
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 50
periodSeconds: 60
scaleUp:
stabilizationWindowSeconds: 30
policies:
- type: Pods
value: 2
periodSeconds: 30

負荷分散

Nginx upstream 設定、least_conn アルゴリズム、Sticky Session、コネクションプール、Keepalive 最適化。トラフィックを均等に分散し、GPU 利用率を最大化します。

3.1 Nginx Upstream 設定

# /etc/nginx/conf.d/deepseek-upstream.conf
upstream deepseek_vllm {
# least_conn アルゴリズム:接続数が最も少ないノードを優先
# LLM 推論シナリオに適しています(リクエストの所要時間のばらつきが大きい)
least_conn;

# 推論ノードプール
server 192.168.1.11:8000 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8000 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.1.13:8000 weight=1 max_fails=3 fail_timeout=30s;

# バックアップノード(低優先度、全プライマリノードがダウンした場合のみ有効)
server 192.168.1.14:8000 weight=1 backup;

# 長期間接続プール:TCP ハンドシェイクのオーバーヘッドを削減
keepalive 64;
keepalive_requests 1000;
keepalive_timeout 60s;
}

# vLLM 推論サービス(高性能)
upstream deepseek_vllm_large {
least_conn;
server 192.168.1.21:8000 weight=3; # A100 × 8(高ウェイト)
server 192.168.1.22:8000 weight=3; # A100 × 8
server 192.168.1.23:8000 weight=1; # A10 × 1(低ウェイト)
keepalive 32;
}

3.2 Sticky Session(セッション維持)

LLM 推論シナリオでは、Sticky Session により同じユーザーの連続リクエストを同じノードにルーティングし、KV Cache のヒット率を向上させることができます:

# Cookie ベースのセッション維持
upstream deepseek_sticky {
# ip_hash アルゴリズム:同じクライアント IP は常に同じノードにルーティング
ip_hash;

server 192.168.1.11:8000;
server 192.168.1.12:8000;
server 192.168.1.13:8000;
}

# sticky cookie を使用(nginx-plus または sticky-module が必要)
upstream deepseek_sticky_cookie {
# sticky cookie srv_id expires=1h domain=.example.com path=/;
server 192.168.1.11:8000;
server 192.168.1.12:8000;
server 192.168.1.13:8000;
}

3.3 コネクションプールと Keepalive 最適化

パラメータ 推奨値 説明
keepalive 32-64 保持するアイドル接続数。ハンドシェイクのオーバーヘッドを削減
keepalive_requests 1000 1 接続あたりの最大リクエスト数。接続リークを防止
keepalive_timeout 60s アイドル接続のタイムアウト時間
proxy_http_version 1.1 HTTP/1.1 は Keep-Alive をサポート
proxy_set_header Connection "" Connection ヘッダーをクリアして接続再利用を有効化

3.4 負荷分散アルゴリズムの比較

アルゴリズム 原理 適用シナリオ 推奨度
round-robin ラウンドロビン分散 ノード構成が同一の場合 星3つ
least_conn 接続数が最も少ないノードに割り当て リクエストの所要時間のばらつきが大きい(LLM に推奨) 星5つ
ip_hash クライアント IP のハッシュに基づく セッション維持が必要、KV Cache 再利用 星4つ
least_time 応答が最も速いノードに割り当て ノードの性能が不均一 星4つ(nginx-plus が必要)

セキュリティ強化

API認証(JWT/OAuth2)、レート制限、IPホワイトリスト、リクエスト検証、プロンプトインジェクション対策、データ暗号化。多層的なセキュリティ防御体制を構築します。

4.1 API認証方式

JWT(JSON Web Token)とOAuth2の2つの認証方式をサポートし、さまざまなシナリオに対応します:

JWT認証(サービス間呼び出し)

# JWTトークン生成(サーバー側)
# Python例
import jwt
import time

def generate_api_token(user_id: str, scope: str = "deepseek:read") -> str:
payload = {
"sub": user_id,
"scope": scope,
"iat": int(time.time()),
"exp": int(time.time()) + 3600 # 1時間で期限切れ
}
return jwt.encode(payload, "your-secret-key", algorithm="HS256")

# Nginx JWT検証(njsまたはlua-nginx-moduleを使用)
# locationブロックにJWT検証ロジックを追加
location /v1/ {
auth_jwt "DeepSeek API";
auth_jwt_key_file /etc/nginx/jwt_public_key.pem;
proxy_pass http://deepseek_vllm;
}

OAuth2認証(ユーザー認可)

# Kong API Gateway OAuth2プラグイン設定
# OAuth2プラグインを有効化
curl -X POST http://localhost:8001/services/deepseek/plugins \
--data "name=oauth2" \
--data "config.enable_authorization_code=true" \
--data "config.enable_client_credentials=true" \
--data "config.token_expiration=3600"

# OAuth2アプリケーションを作成
curl -X POST http://localhost:8001/consumers/your-app/oauth2 \
--data "name=DeepSeek App" \
--data "client_id=your-client-id" \
--data "client_secret=your-client-secret" \
--data "redirect_uris[]=https://your-app.com/callback"

4.2 レート制限

# Nginxレート制限設定
# /etc/nginx/nginx.conf
http {
# IPごとのレート制限:10リクエスト/秒、バースト20
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

# APIキーごとのレート制限:50リクエスト/秒
limit_req_zone $http_x_api_key zone=per_key_limit:10m rate=50r/s;

# 同時接続数制限
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
}

# Serverブロックで適用
server {
location /v1/chat/completions {
# 基本レート制限
limit_req zone=api_limit burst=20 nodelay;
limit_req_status 429;

# APIキーごとのレート制限
limit_req zone=per_key_limit burst=50 nodelay;

# 同時接続制限
limit_conn conn_limit 10;

proxy_pass http://deepseek_vllm;
}
}

4.3 IPホワイトリスト

# Nginx IPホワイトリスト
location /v1/admin/ {
# 内部ネットワークとVPNセグメントのみ許可
allow 10.0.0.0/8;
allow 172.16.0.0/12;
allow 192.168.0.0/16;
deny all;

proxy_pass http://deepseek_vllm;
}

# GeoIPモジュールを使用して国/地域を制限
# geoip_country /usr/share/GeoIP/GeoIP.dat;
# map $geoip_country_code $allowed_country {
# default no;
# CN yes;
# US yes;
# }

4.4 リクエスト検証

APIゲートウェイ層でリクエストを検証し、悪意のあるリクエストや異常なリクエストを防ぎます:

# Nginxリクエスト検証
location /v1/chat/completions {
# リクエストボディサイズを制限
client_max_body_size 1M;

# POSTメソッドのみ許可
limit_except POST {
deny all;
}

# Content-Typeを制限
if ($http_content_type !~ "^application/json") {
return 415 '{"error":"Unsupported Media Type"}'; }
# max_tokensパラメータを制限(リソース乱用防止)
# lua-nginx-moduleまたはnjsと組み合わせて実装

proxy_pass http://deepseek_vllm;
}

4.5 プロンプトインジェクション対策

プロンプトインジェクションは、エンタープライズAIアプリケーションが直面する主要なセキュリティ脅威の1つです。攻撃者は巧妙に細工されたプロンプトを通じてシステム指示を回避し、機密情報を取得したり、不正な操作を実行したりします。

対策:

  • 入力フィルタリング:既知のインジェクションパターン(「ignore previous instructions」、「system prompt」などのキーワード)を検出してフィルタリング
  • 出力レビュー:モデル出力の機密情報(PII、キー、内部IP)を検出
  • ロール分離:システムプロンプトとユーザー入力を厳密に分離し、特別な区切り文字を使用
  • 最小権限:モデルは許可された範囲のデータとツールにのみアクセス可能
  • コンテンツセーフティAPI:サードパーティのコンテンツセーフティサービスを統合し、違反コンテンツをリアルタイムで検出

# Pythonでのプロンプトインジェクション検出例
import re

INJECTION_PATTERNS = [
r"ignore\s+(all\s+)?(previous|above|prior)\s+instructions?",
r"you\s+are\s+now\s+(DAN|jailbreak)",
r"system\s*prompt[:=]",
r"pretend\s+you\s+are",
r"<\|im_start\|>",
r"<\|im_end\|>",
]

def detect_injection(user_input: str) -> bool:
for pattern in INJECTION_PATTERNS:
if re.search(pattern, user_input, re.IGNORECASE):
return True
return False

4.6 データ暗号化

暗号化レイヤー ソリューション 説明
転送暗号化 TLS 1.3 すべてのAPI通信でHTTPSを強制
保存暗号化 AES-256-GCM ログ、キャッシュ、バックアップ内の機密データを暗号化して保存
鍵管理 HashiCorp Vault / AWS KMS 鍵の集中管理、自動ローテーション、アクセス監査
データベース暗号化 TDE + 列レベル暗号化 PIIデータ(APIキー、ユーザー情報)の暗号化保存

権限管理

RBACモデル、マルチテナント分離、APIキー管理、使用量クォータ、部門レベルのアクセス制御。きめ細かな権限制御を実現します。

5.1 RBAC権限モデル

ロールベースのアクセス制御(RBAC)は、ロール、権限、リソースのマッピング関係を定義します:

ロール 権限範囲 代表的なユーザー
Super Admin 全権限:システム設定、ユーザー管理、モデル管理 プラットフォーム運用チーム
Dept Admin 部門内のユーザー管理、使用量の閲覧、クォータ割り当て 部門責任者
Developer API呼び出し、モデル選択、自分の使用量の閲覧 開発エンジニア
Viewer 使用量レポートとモデルリストの閲覧のみ 非技術者
Auditor 監査ログ、コンプライアンスレポートの閲覧 コンプライアンス/セキュリティチーム

5.2 マルチテナント分離

マルチテナント分離はエンタープライズ向けプラットフォームの必須要件です。推奨ソリューション:

  • 論理分離:同じ推論クラスターで、APIキーによってテナントを区別。中小規模に適しています
  • ネームスペース分離:K8s Namespaceレベルの分離。各テナントが独立したDeploymentを持ちます
  • クラスター分離:独立したGPUクラスターで物理的に分離。金融、医療などの高いコンプライアンス要件に適しています
  • モデル分離:異なるテナントが異なるモデルインスタンスを使用し、KV Cacheを完全に分離します

5.3 APIキー管理

# API Key 管理のベストプラクティス
# 1. Key 生成
openssl rand -hex 32 # 64文字のランダムKey

# 2. Key 保存(ハッシュ保存、平文は保存しない)
import hashlib
import secrets

def create_api_key() -> tuple[str, str]:
raw_key = "sk-" + secrets.token_hex(24)
hashed = hashlib.sha256(raw_key.encode()).hexdigest()
return raw_key, hashed # 平文はユーザーに返し、ハッシュはDBに保存

# 3. Key 検証
def verify_api_key(raw_key: str, stored_hash: str) -> bool:
return hashlib.sha256(raw_key.encode()).hexdigest() == stored_hash

# 4. Key 権限バインド
api_key_config = {
"key_hash": "abc123...",
"tenant_id": "tenant-001",
"role": "developer",
"rate_limit": 100, # リクエスト/分
"daily_quota": 1000000, # Token/日
"allowed_models": ["deepseek-v3", "deepseek-r1"],
"expires_at": "2026-12-31T23:59:59Z"
}

5.4 使用量クォータ管理

クォータタイプ 粒度
Tokenクォータ 日/月/年単位 ユーザーごとに100万Token/日
リクエストクォータ 分/時間単位 API Keyごとに60リクエスト/分
同時実行クォータ リアルタイム テナントごとに最大10同時リクエスト
モデルクォータ モデル単位 V3は無制限、R1は10万Token/日に制限

5.5 部門レベルのアクセス制御

# 部門レベルの権限設定例
departments:
engineering:
quota: 5000000 # 500万Token/日
models: [deepseek-v3, deepseek-r1, deepseek-coder]
rate_limit: 200
members: [user1, user2, user3]

marketing:
quota: 1000000 # 100万Token/日
models: [deepseek-v3]
rate_limit: 50
members: [user4, user5]

finance:
quota: 500000
models: [deepseek-v3]
rate_limit: 30
members: [user6]
# 財務部門の特別制限:ストリーミング出力を無効化
features:
streaming: false

ログ監査

リクエストログ、ユーザー活動追跡、コンプライアンス監査、ログ保存ポリシー、ELK Stack統合。等保、GDPRなどのコンプライアンス要件を満たします。

6.1 リクエストログ記録

監査、課金、問題解決のために、各APIリクエストのメタデータを完全に記録します:

# Nginx監査ログ形式
# /etc/nginx/conf.d/deepseek-log.conf
log_format deepseek_audit escape=json
'{'
'"timestamp":"$time_iso8601",'
'"remote_addr":"$remote_addr",'
'"api_key":"$http_x_api_key",'
'"request_method":"$request_method",'
'"request_uri":"$request_uri",'
'"status":$status,'
'"body_bytes_sent":$body_bytes_sent,'
'"request_time":$request_time,'
'"upstream_addr":"$upstream_addr",'
'"upstream_response_time":"$upstream_response_time",'
'"user_agent":"$http_user_agent",'
'"x_forwarded_for":"$http_x_forwarded_for"'
'}';

access_log /var/log/nginx/deepseek-audit.log deepseek_audit buffer=64k flush=5s;

6.2 ユーザー活動追跡

アプリケーション層でユーザー操作を記録し、完全な監査チェーンを構築します:

# Python監査ログミドルウェア
import logging
import json
from datetime import datetime, timezone

audit_logger = logging.getLogger("deepseek.audit")

def log_api_call(user_id: str, action: str, details: dict):
audit_entry = {
"timestamp": datetime.now(timezone.utc).isoformat(),
"user_id": user_id,
"action": action, # "chat.completion", "model.list", etc.
"model": details.get("model"),
"prompt_tokens": details.get("prompt_tokens"),
"completion_tokens": details.get("completion_tokens"),
"total_tokens": details.get("total_tokens"),
"latency_ms": details.get("latency_ms"),
"ip_address": details.get("ip_address"),
"user_agent": details.get("user_agent"),
"status": details.get("status"), # "success" | "error"
}
audit_logger.info(json.dumps(audit_entry, ensure_ascii=False))

6.3 コンプライアンス監査要件

コンプライアンス基準 ログ要件 保存期間
等保2.0(レベル3) ユーザーログイン、操作、設定変更、異常イベント 少なくとも6ヶ月
GDPR データ処理活動の記録、データアクセスログ、同意記録 必要に応じて(データ最小化の原則)
SOC 2 アクセス制御、変更管理、システム運用、セキュリティインシデント 少なくとも12か月
ISO 27001 情報セキュリティインシデント、アクセス制御、操作ログ リスク評価に基づいて決定

6.4 ログ保持ポリシー

# Logrotate設定
# /etc/logrotate.d/deepseek
/var/log/deepseek/*.log {
daily
rotate 90 # 90日間保持
compress
delaycompress
missingok
notifempty
dateext
dateformat -%Y%m%d
postrotate
# Nginxにログファイルを再オープンするシグナルを送信
/usr/bin/killall -USR1 nginx 2>/dev/null || true
endscript
}

# 監査ログ(等保要件を満たすため、6か月間保持)
/var/log/deepseek/audit/*.log {
daily
rotate 180
compress
delaycompress
missingok
notifempty
dateext
# オブジェクトストレージ(S3/OSS)にアーカイブ
lastaction
/usr/local/bin/archive-logs.sh
endscript
}

6.5 ELKスタック統合

# Filebeat設定:Nginxログを収集してElasticsearchに送信
# /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/deepseek-audit.log
json.keys_under_root: true
json.add_error_key: true
fields:
service: deepseek-api
log_type: audit
fields_under_root: true

output.elasticsearch:
hosts: ["https://elasticsearch.example.com:9200"]
username: "filebeat_writer"
password: "${ES_PASSWORD}"
index: "deepseek-audit-%{+yyyy.MM.dd}"

# ILMポリシー:ホットデータ7日、ウォームデータ30日、コールドデータ90日
setup.ilm.enabled: true
setup.ilm.rollover_alias: "deepseek-audit"
setup.ilm.pattern: "{now/d}-000001"
setup.ilm.policy_name: "deepseek-audit-policy"

監視とアラート

Prometheusメトリクス収集、Grafana可視化ダッシュボード、AlertManagerアラートルール、SLA監視、コスト追跡。

7.1 Prometheusメトリクス収集

vLLMにはPrometheusメトリクスエンドポイントが組み込まれており、すぐに使用できます:

# prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s

alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']

rule_files:
- '/etc/prometheus/rules/deepseek-alerts.yml'

scrape_configs:
- job_name: 'vllm'
scrape_interval: 10s
static_configs:
- targets:
- 'vllm-node-1:8000'
- 'vllm-node-2:8000'
- 'vllm-node-3:8000'
metrics_path: '/metrics'

- job_name: 'nginx'
static_configs:
- targets: ['nginx-exporter:9113']

- job_name: 'node'
static_configs:
- targets:
- 'node-exporter-1:9100'
- 'node-exporter-2:9100'
- 'node-exporter-3:9100'

- job_name: 'dcgm' # NVIDIA GPUメトリクス
static_configs:
- targets: ['dcgm-exporter:9400']

7.2 Grafanaダッシュボード

以下のGrafanaダッシュボードテンプレートのインポートを推奨します:

ダッシュボード ID 用途
NVIDIA DCGM Exporter 19004 GPU使用率、温度、消費電力、メモリ
Node Exporter Full 1860 CPU、メモリ、ディスク、ネットワーク
Nginx 11168 リクエスト量、レイテンシ、エラー率、接続数
vLLMカスタム 自社構築 TTFT、TPOT、TPS、キューの長さ

7.3 AlertManagerアラートルール

# /etc/prometheus/rules/deepseek-alerts.yml
groups:
- name: deepseek_sla
rules:
# 可用性アラート
- alert: DeepSeekServiceDown
expr: up{job="vllm"} == 0
for: 1m
labels:
severity: critical
team: platform
annotations:
summary: "DeepSeek 推論サービスが利用不可"
description: "ノード {{ $labels.instance }} が1分以上ダウンしています"

# レイテンシアラート
- alert: HighLatency
expr: histogram_quantile(0.95, rate(vllm:time_to_first_token_seconds_bucket[5m])) > 2
for: 5m
labels:
severity: warning
annotations:
summary: "TTFT P95 が2秒を超えています"

# GPUメモリアラート
- alert: GPUMemoryHigh
expr: vllm:gpu_cache_usage_perc > 90
for: 5m
labels:
severity: warning
annotations:
summary: "GPUメモリ使用率が90%を超えています"

# キュー滞留アラート
- alert: RequestQueueBacklog
expr: vllm:num_requests_waiting > 20
for: 3m
labels:
severity: warning
annotations:
summary: "リクエストキューの滞留が20を超えています"

# エラー率アラート
- alert: HighErrorRate
expr: rate(vllm:request_errors_total[5m]) / rate(vllm:request_total[5m]) > 0.05
for: 5m
labels:
severity: critical
annotations:
summary: "APIエラー率が5%を超えています"

# コストアラート
- alert: HighCostDaily
expr: increase(vllm:total_tokens_generated[24h]) * 0.000002 > 100
for: 1h
labels:
severity: info
annotations:
summary: "1日のトークン消費推定コストが$100を超えています"

7.4 SLAモニタリング

# Prometheus SLA記録ルール
# /etc/prometheus/rules/deepseek-sla.yml
groups:
- name: deepseek_sla_recording
interval: 1m
rules:
# 可用性パーセンテージ
- record: job:availability:ratio
expr: avg(up{job="vllm"})

# 成功リクエスト率
- record: job:success_rate:ratio
expr: |
sum(rate(vllm:request_success_total[5m]))
/
sum(rate(vllm:request_total[5m]))

# P50/P95/P99 レイテンシ
- record: job:ttft:p50
expr: histogram_quantile(0.50, rate(vllm:time_to_first_token_seconds_bucket[5m]))

- record: job:ttft:p95
expr: histogram_quantile(0.95, rate(vllm:time_to_first_token_seconds_bucket[5m]))

- record: job:ttft:p99
expr: histogram_quantile(0.99, rate(vllm:time_to_first_token_seconds_bucket[5m]))

災害復旧計画

モデルバックアップ、設定バックアップ、マルチリージョン展開、災害復旧RTO/RPO、フェイルオーバー訓練。極端な状況下でのビジネス継続性を確保します。

8.1 モデルバックアップ戦略

バックアップ内容 バックアップ方法 頻度 保存場所
モデル重みファイル オブジェクトストレージ + ローカルNAS バージョン更新時 S3/OSS + ローカルストレージ
推論設定 Gitリポジトリ 変更のたび GitHub/GitLab + マルチリージョン
Nginx設定 Gitリポジトリ + 構成管理 変更のたび Git + Ansible/Helm
K8sリソース定義 GitOps(ArgoCD/Flux) 変更のたび Gitリポジトリ
監査ログ オブジェクトストレージアーカイブ 毎日 S3 Glacier / OSSアーカイブ

8.2 マルチリージョン展開アーキテクチャ

# マルチリージョンDNS設定(Route 53 / Cloud DNS)
# プライマリリージョン:ap-southeast-1(シンガポール)
# スタンバイリージョン:us-west-2(オレゴン)

# インテリジェントDNSルーティングポリシー
Record: api.deepseek.example.com
Type: A (Alias)
Routing: Latency-based

# プライマリリージョン
ap-southeast-1:
- api.deepseek.example.com → プライマリクラスタLB (103.x.x.x)

# スタンバイリージョン(ホットスタンバイ)
us-west-2:
- api.deepseek.example.com → スタンバイクラスタLB (54.x.x.x)

# フェイルオーバー設定
# ヘルスチェック:30秒ごとにプライマリクラスタの/healthをプローブ
# 連続3回失敗 → スタンバイリージョンに自動切り替え
# プライマリクラスタ復旧 → 自動的に切り替え戻し

8.3 RTO/RPO定義

指標 定義 目標値 実装方法
RTO 復旧時間目標(サービス復旧までの時間) < 15 分 DNS フェイルオーバー + K8s 自動再構築
RPO 復旧ポイント目標(失われるデータ量) < 1 分 リアルタイム同期 + トランザクションログ

8.4 フェイルオーバー訓練

# フェイルオーバー訓練スクリプト
#!/bin/bash
# failover-drill.sh

echo "=== フェイルオーバー訓練開始 ==="
echo "時刻: $(date)"

# 1. プライマリクラスタ障害のシミュレーション
echo "[1/5] プライマリクラスタ障害をシミュレーション中..."
kubectl scale deployment deepseek-vllm --replicas=0 -n deepseek
sleep 10

# 2. DNS 切り替えの検証
echo "[2/5] DNS 切り替えを検証中..."
PRIMARY_HEALTH=$(curl -s -o /dev/null -w "%{http_code}" https://primary-api.example.com/health)
BACKUP_HEALTH=$(curl -s -o /dev/null -w "%{http_code}" https://backup-api.example.com/health)
echo "プライマリクラスタ: HTTP $PRIMARY_HEALTH"
echo "バックアップクラスタ: HTTP $BACKUP_HEALTH"

# 3. API 可用性の検証
echo "[3/5] API 可用性を検証中..."
curl -s https://api.deepseek.example.com/v1/models | jq .

# 4. データ整合性の検証
echo "[4/5] データ整合性を検証中..."
# 直近 1 分間の監査ログが完全かどうかを確認

# 5. プライマリクラスタの復旧
echo "[5/5] プライマリクラスタを復旧中..."
kubectl scale deployment deepseek-vllm --replicas=3 -n deepseek

echo "=== フェイルオーバー訓練完了 ==="
echo "RTO: 実際の復旧時間を記録"
echo "RPO: データ損失がないか確認"

RTO/RPO が目標を達成しているか、また計画の不足点を発見するために、四半期ごとに完全なフェイルオーバー訓練を実施することを推奨します。基本デプロイメントについては DeepSeek デプロイチュートリアル を参照してください。

コスト管理

Token 使用量追跡、部門別コスト配分、予算アラート、モデル階層戦略、キャッシュ最適化。ROI を最大化し、AI 推論コストを管理します。

9.1 Token 使用量追跡

# Token 使用量統計 SQL 例(ClickHouse)
CREATE TABLE token_usage (
timestamp DateTime,
api_key String,
tenant_id String,
department String,
model String,
prompt_tokens UInt64,
completion_tokens UInt64,
total_tokens UInt64
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(timestamp)
ORDER BY (tenant_id, department, timestamp);

# 部門別の日次使用量
SELECT
department,
toDate(timestamp) as date,
sum(total_tokens) as daily_tokens,
sum(prompt_tokens) as prompt_tokens,
sum(completion_tokens) as completion_tokens
FROM token_usage
WHERE timestamp >= now() - INTERVAL 30 DAY
GROUP BY department, date
ORDER BY department, date;

9.2 部門別コスト配分

部門 月間 Token 推定コスト 割当使用率 ステータス
研究開発部 45,000,000 ¥450 90% 上限間近
マーケティング部 12,000,000 ¥120 40% 正常
カスタマーサービス部 80,000,000 ¥800 80% 正常
財務部 2,000,000 ¥20 10% 低使用率

9.3 予算アラート設定

# Prometheus 予算アラートルール
groups:
- name: cost_alerts
rules:
# 部門予算使用率アラート
- alert: DeptBudget80Percent
expr: |
(sum by (department) (increase(vllm:total_tokens[30d])) * 0.01)
/
(dept_budget_limit) > 0.8
for: 1h
labels:
severity: warning
annotations:
summary: "部門 {{ $labels.department }} の予算使用率が80%を超えました"

# 日次コスト異常増加アラート
- alert: CostSpike
expr: |
(sum(increase(vllm:total_tokens[1h])) * 0.01)
>
(sum(increase(vllm:total_tokens[1h] offset 24h)) * 0.01) * 3
for: 30m
labels:
severity: critical
annotations:
summary: "トークン消費が昨日の同時刻と比較して300%以上増加しました"

9.4 モデル階層化戦略

タスクの複雑さに応じて異なるモデルにインテリジェントにルーティングし、「牛刀を用いて鶏を割く」ことを避けます:

タスクタイプ 推奨モデル 相対コスト
簡単なQ&A DeepSeek V3 1x 翻訳、要約、分類
コード生成 DeepSeek Coder 1x コード補完、バグ修正
複雑な推論 DeepSeek R1 4x 数学的証明、論理的解析
キャッシュヒット キャッシュを直接返す 0x 繰り返しの質問、一般的なプロンプト

9.5 キャッシュ戦略

セマンティックキャッシュにより推論コストを大幅に削減でき、繰り返しの質問や類似の質問にはキャッシュ結果を直接返します:

# Redis セマンティックキャッシュ設定
# GPTCache または LangChain Cache を使用
from gptcache import cache
from gptcache.adapter import openai
from gptcache.embedding import Onnx
from gptcache.manager import CacheBase, VectorBase, get_data_manager
from gptcache.similarity_evaluation.distance import SearchDistanceEvaluation

# セマンティックキャッシュの初期化
onnx_embedding = Onnx()
data_manager = get_data_manager(
CacheBase("redis", host="redis-cache", port=6379),
VectorBase("milvus", host="milvus", port="19530")
)

cache.init(
embedding_func=onnx_embedding.to_embeddings,
data_manager=data_manager,
similarity_evaluation=SearchDistanceEvaluation(),
similarity_threshold=0.85 # 類似度閾値
)

# キャッシュヒット率の期待値
# カスタマーサービスシナリオ: 30%-50%
# コード生成: 10%-20%
# 一般的なQ&A: 20%-40%

セマンティックキャッシュにより推論コストを20%-40%削減できます。モデル選定については DeepSeek 利用ガイドDeepSeek モデル詳細 をご覧ください。

コンプライアンスとデータプライバシー

データレジデンシー、GDPR準拠、データマスキング、モデルカード、責任あるAIガイドライン。AIアプリケーションがグローバルなデータ保護規制に準拠することを確保します。

10.1 データレジデンシー

ユーザーデータが指定された地理的領域に保存され、各国・地域のデータ主権要件を満たすことを確保します:

ユーザー地域 データ保存地域 推論ノード 規制根拠
中国本土 Alibaba Cloud / Huawei Cloud(国内) 国内GPUクラスター データ安全法、個人情報保護法
欧州連合 AWS Frankfurt / GCP europe-west EU内GPUクラスター GDPR
アジア太平洋 AWS Singapore シンガポールGPUクラスター PDPA(シンガポール)

10.2 GDPR準拠チェックリスト

  • データ最小化:必要なデータのみ収集し、プロンプトログにPIIを保存しない
  • ユーザー同意:初回使用前にデータ処理方法を明確に説明し、明示的な同意を得る
  • データポータビリティ:ユーザーデータのエクスポート機能を提供(JSON/CSV形式)
  • 消去権:関連するすべてのデータの削除リクエストをサポート(30日以内)
  • データ処理契約(DPA):第三者サービスプロバイダーとDPAを締結
  • データ保護影響評価(DPIA):AI推論シナリオでDPIAを完了する
  • データ保護責任者(DPO):DPOを指定し、連絡先を公開
  • 72時間通知:データ漏洩事故は72時間以内に監督機関に報告

10.3 データマスキング

モデルにプロンプトを送信する前に、機密情報を自動的に検出してマスキングします:

# Pythonデータマスキングミドルウェア
import re
from presidio_analyzer import AnalyzerEngine
from presidio_anonymizer import AnonymizerEngine

analyzer = AnalyzerEngine()
anonymizer = AnonymizerEngine()

def anonymize_prompt(text: str) -> str:
# PIIエンティティを検出
results = analyzer.analyze(
text=text,
entities=["PHONE_NUMBER", "EMAIL_ADDRESS",
"PERSON", "CREDIT_CARD", "IBAN_CODE",
"CN_ID", "PASSPORT_NUMBER"],
language="zh"
)

# 匿名化処理
anonymized = anonymizer.anonymize(text=text, analyzer_results=results)
return anonymized.text

# 例
original = "我的手机号是 13812345678,邮箱是 zhang@example.com"
safe = anonymize_prompt(original)
# 出力: "我的手机号是 <PHONE_NUMBER>,邮箱是 <EMAIL_ADDRESS>"

10.4 モデルカード

各モデルインスタンスは、モデルの基本情報、能力の境界、リスク警告を記録したモデルカードを維持する必要があります:

モデルカード項目 説明
モデル名 DeepSeek-V3 / DeepSeek-R1
モデルバージョン v3.0-2026-01
トレーニングデータの基準日 2025-12-31
対応言語 中国語、英語、日本語、韓国語など20以上の言語
既知の制限 リアルタイム情報には非対応、幻覚の可能性、医療診断には使用不可
バイアス評価 標準的なバイアステストセットを通過済み。詳細は技術レポートを参照
利用制限 違法コンテンツの生成禁止、高影響シナリオでの自動意思決定には使用不可

10.5 責任あるAIガイドライン

企業がAIを利用する際の基本原則:

  • 透明性:AI生成コンテンツをユーザーに明確に示し、人間になりすまさない
  • 公平性:モデル出力のバイアスを定期的に評価し、異なるグループに対して公平に扱う
  • 説明可能性:重要な意思決定シナリオで推論プロセスを提供し、人間によるレビューをサポート
  • 人間による監督:高リスクな意思決定(医療、法律、金融)には必ず人間によるレビューを含める
  • 継続的モニタリング:AI出力品質のモニタリングを確立し、モデルのパフォーマンスと安全性を定期的に評価
  • 安全第一:コンテンツ安全フィルタリング、脱獄検出、緊急遮断メカニズム
  • 持続可能性:モデル推論の炭素排出に注目し、エネルギー効率比を最適化する

責任あるAIは一度きりの作業ではなく、継続的なプロセスです。AIガバナンス委員会を設立し、AIアプリケーションのリスクとコンプライアンスを定期的にレビューすることをお勧めします。詳細なベストプラクティスについては、DeepSeekモデルリストプロンプトエンジニアリングをご覧ください。

DeepSeekエンタープライズアプリケーションFAQ

DeepSeekのエンタープライズ展開にはどのくらいのGPUが必要ですか? +
モデルサイズと同時実行数に依存します。8Bモデル:シングルA10(24GB)で20〜50の同時実行をサポート可能。32Bモデル:2枚のA100で50〜100の同時実行をサポート可能。70Bモデル:4枚のA100で50〜100の同時実行をサポート可能。671Bモデル:少なくとも8枚のH100が必要です。3ノードから始め、実際の負荷に応じてスケールアウトすることをお勧めします。予算が限られている場合は、まずDeepSeek公式APIでシナリオを検証し、その後自社構築の規模を決定できます。
企業はデータセキュリティとコンプライアンスをどのように確保しますか? +
主な対策は次のとおりです。1) トランスポート層とストレージ層での全チェーン暗号化(TLS 1.3 + AES-256)。2) API認証はJWT/OAuth2を使用し、IPホワイトリストとレート制限を併用。3) プロンプト入力の自動匿名化(PII検出)。4) 完全な監査ログにより、等保2.0、GDPRなどのコンプライアンス要件を満たす。5) マルチテナント分離(論理分離または物理分離)。6) データレジデンシーポリシーにより、データの国外持ち出しを防ぐ(必要な場合)。定期的なセキュリティペネトレーションテストとコンプライアンス監査を推奨します。
99.9%の可用性を実現するには? +
マルチノード展開(少なくとも3ノード)+ ロードバランシング + ヘルスチェック + 自動フェイルオーバー。K8s展開時にはPodのアンチアフィニティを構成してノードを物理的に分散し、HPAによる自動スケーリングを併用します。重要な業務には、マルチAZ展開(アクティブ-スタンバイ)を推奨し、DNSスマートルーティングによるリージョン間フェイルオーバーを実現します。RTO目標は15分未満、RPO目標は1分未満です。四半期ごとにフェイルオーバードリルを実施します。
エンタープライズ展開のコストをどのように管理しますか? +
1) モデル階層化:単純なタスクにはV3(1倍コスト)、複雑な推論にはR1のみ(4倍コスト)。2) セマンティックキャッシュ:推論量を20%〜40%削減可能。3) 部門ごとの割り当てと予算アラートで乱用を防止。4) スポット/プリエンプティブGPUインスタンスの使用(コスト60%〜80%削減)、非リアルタイムタスクに適しています。5) 8Bモデルを優先、ほとんどのシナリオで十分。6) ハイブリッド方式:高同時実行のコア業務は自社構築、ロングテール需要は公式APIを使用。適切な構成で、月間コストは数万元以内に抑えられます。
プロンプトインジェクション攻撃を防ぐには? +
多層防御戦略:1) 入力フィルタリング層:既知のインジェクションパターン(「ignore instructions」、「system prompt」など)を検出。正規表現マッチング + セマンティック検出。2) ロール分離:システムプロンプトとユーザー入力を特別な区切り文字で厳密に分離。3) 出力レビュー層:モデル出力に対して機密情報検出とコンテンツセキュリティレビューを実施。4) 最小権限:モデルは承認されたツールとデータにのみアクセスし、権限昇格を防ぐ。5) サーキットブレーカー:異常な動作を検出した場合、セッションを自動的に中断。専門のコンテンツセキュリティAPIをフォールバックとして統合することを推奨します。
エンタープライズ展開は公式APIと比較してどのような利点がありますか? +
自社デプロイの利点:1) データが完全にプライベートで、第三者サーバーを経由せず、金融・医療などの厳格なコンプライアンス要件に適しています。2) モデルのカスタマイズが可能(ファインチューニング、量子化、システムプロンプト)。3) 高並行処理時のコストが低い(トークン単価は公式APIの約1/5〜1/10)。4) レイテンシを制御可能(イントラネットデプロイで、公衆ネットワークの遅延なし)。5) API呼び出し制限なし。公式APIの利点:運用保守不要、フルバージョンの671Bモデル、従量課金で初期コストが低い。高並行のコア業務には自社デプロイを推奨し、ロングテールのニーズには公式APIを使用することをお勧めします。

DeepSeek 完全チュートリアル体系

以下は、当サイトが提供するすべてのDeepSeekチュートリアルとツールで、入門からエンタープライズレベルまでの完全な学習パスをカバーしています。

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

完全免费,取消任意时间。我们不会发送垃圾邮件。