J'industrialise vos systèmes IAcadrage → POC → production
AI & ML Engineer (3,5 ans d'XP) et 2× certifié AWS, je build et fais tourner vos solutions IA, sur le cloud et en on-prem. Du concret, du souverain, du performant.
Discutez avec mon avatar IA, en direct
Ton image ici
Votre POC IA est prêt ?
Déployer en production
INITIALIZING
PIPELINE...
0%
JavaScript est nécessaire pour lancer cette démonstration.
[ IACINE AI LAB / MLOps ]
pipeline: qwen36-prod-v4
region: eu-west-1
$ date --iso-8601=seconds
2026-08-22
08:42:01 CEST
$ git status --short --branch
## main...origin/main
[OK] Working tree clean
commit: 8f3a91c
run_id: train-20260822-0842
$ source .venv/bin/activate
(mlops) $ python -V
Python 3.12.5
(mlops) $ uv sync --frozen
Resolved 214 packages
[OK] Environment reproducible
$ aws sts get-caller-identity
account: 7421••••••19
role: iacine-mlops-prod
region: eu-west-1
[OK] AWS identity verified
[ STAGE 01 / DATASET ]
$ aws s3 sync s3://iacine-data/v4 .
download: instructions-000.parquet
download: instructions-001.parquet
download: cyber-rag-corpus.jsonl
download: eval-golden-set.jsonl
[████░░░░░░░░░░░░░░░░] 20%
[████████░░░░░░░░░░░░] 40%
[████████████░░░░░░░░] 60%
[████████████████░░░░] 80%
[████████████████████] 100%
[OK] 18.7 GiB synchronized
$ python data/validate.py
schema: iacine-instruct-v4
raw samples 52,840
language/fr 71.4%
language/en 28.6%
checking UTF-8...
checking JSON schema...
checking conversations...
[WARN] 184 malformed samples
[WARN] quarantined → rejects/
[OK] Schema validation passed
$ python data/clean.py --strict
Unicode normalization: NFC
PII detector: Presidio + rules
emails redacted 1,204
phones redacted 418
secrets rejected 27
MinHash dedup threshold 0.92
duplicates removed 2,113
quality filtered 936
[OK] 49,580 clean samples
$ python data/split.py --seed 42
train 44,622 90%
validation 2,479 5%
test 2,479 5%
[OK] Stratified split locked
$ python data/tokenize.py
tokenizer: Qwen3.6Tokenizer
train sequence length: 4,096
packing efficiency: 93.8%
tokens train: 48.21M
tokens eval: 2.67M
[OK] Dataset ready 🎉
[ STAGE 02 / GPU CHECK ]
$ python infra/gpu_probe.py
instance: ml.p5.48xlarge
CPU: 192 vCPU · RAM: 2,048 GiB
GPU 0 NVIDIA H100 80GB HBM3 READY
GPU 1 NVIDIA H100 80GB HBM3 READY
GPU 2 NVIDIA H100 80GB HBM3 READY
GPU 3 NVIDIA H100 80GB HBM3 READY
GPU 4 NVIDIA H100 80GB HBM3 READY
GPU 5 NVIDIA H100 80GB HBM3 READY
GPU 6 NVIDIA H100 80GB HBM3 READY
GPU 7 NVIDIA H100 80GB HBM3 READY
aggregate HBM3: 640 GiB
NVSwitch: 900 GB/s per GPU
EFA network: up to 3,200 Gbps
[OK] NCCL all-reduce 8/8 healthy
CUDA 12.6 · NCCL 2.23
bf16 supported: true
FlashAttention-2: enabled
[ STAGE 03 / MODEL ]
$ python model/pull.py
model: Qwen/Qwen3.6-27B
type: dense causal LM + vision encoder
parameters: 27B · layers: 64
hidden size: 5,120
native context: 262,144 tokens
fine-tune window: 4,096 tokens
revision: 91db4fa
weights-01.safetensors 100%
weights-02.safetensors 100%
weights-03.safetensors 100%
weights-04.safetensors 100%
[OK] SHA-256 verified
$ accelerate launch finetune.py
strategy: QLoRA / NF4
LoRA rank: 64 · alpha: 128
dropout: 0.05
optimizer: paged_adamw_8bit
scheduler: cosine
learning_rate: 2.0e-4
warmup_ratio: 0.03
micro_batch/GPU: 2
gradient_accumulation: 8
effective_batch: 128
precision: bf16 · quant: NF4 double-quant
gradient_checkpointing: on
[OK] Distributed trainer ready
[ STAGE 04 / FINE-TUNING ]
Starting 10 epochs...
[WARN] val_loss +0.007 · keeping epoch-09
[OK] Best checkpoint selected
🎉 MODEL TRAINED SUCCESSFULLY
[ FINAL TRAINING METRICS ]
checkpoint epoch-09
train_loss 0.628
validation_loss 0.704
token_accuracy 86.70%
perplexity 2.022
epochs 10/10
training_time 07:31:48
[ STAGE 05 / EVALUATION ]
$ python eval/run_suite.py
suite: iacine-eval-v3
holdout prompts: 2,479
semantic QA [██████████] 100%
cyber reasoning [██████████] 100%
tool selection [██████████] 100%
safety probes [██████████] 100%
macro F1 0.884
exact match 0.817
tool accuracy 0.931
grounded answers 0.946
hallucination rate 0.034
unsafe response rate 0.004
[OK] All quality gates passed
$ python model/merge_adapter.py
Merging LoRA → base weights
[████████████████████] 100%
[OK] Adapter merged
$ python model/quantize.py --awq
quantization: AWQ 4-bit
calibration samples: 512
quantizing shards... 100%
[OK] Model size 54.0 → 18.7 GB
$ aws s3 cp model/ s3://iacine-models/
uploading 18.7 GB... 100%
[OK] Artifact versioned
model_uri: qwen36-27b/v4
[ STAGE 06 / RAG PIPELINE ]
$ python rag/sync_sources.py
source:s3 8,420 docs
source:confluence 1,284 docs
source:github 617 docs
source:notion 293 docs
[OK] 10,614 documents synced
$ python rag/parse.py --docling
PDF layout extraction: enabled
OCR fallback: enabled
tables extracted 2,918
images captioned 1,406
[WARN] 12 encrypted PDFs skipped
[OK] Parsing complete
$ python rag/chunk.py
strategy: semantic recursive
chunk_size: 768 tokens
overlap: 96 tokens
chunks created: 84,219
[OK] Metadata preserved
$ python rag/embed.py
embedding: BAAI/bge-m3
dimensions: 1024
batch_size: 256
[████░░░░░░░░░░░░░░░░] 20%
[████████░░░░░░░░░░░░] 40%
[████████████░░░░░░░░] 60%
[████████████████░░░░] 80%
[████████████████████] 100%
[OK] 84,219 vectors generated
$ python rag/index.py --hybrid
engine: OpenSearch Serverless
index: iacine-knowledge-v4
vector: HNSW / cosine
lexical: BM25
fusion: reciprocal-rank
upsert 84,219/84,219
[OK] Vector index healthy
$ python rag/evaluate.py
golden questions: 750
Recall@5 0.913
MRR@10 0.842
NDCG@10 0.874
groundedness 0.951
context recall 0.927
[OK] RAG quality gate passed
🎉 RAG PIPELINE READY
[ STAGE 07 / CONTAINER ]
$ docker buildx build --platform amd64 .
[1/7] FROM nvidia/cuda:12.6-runtime
[2/7] Installing vLLM
[3/7] Installing FastAPI
[4/7] Copying agent runtime
[5/7] Copying RAG config
[6/7] Compiling kernels
[7/7] Writing OCI image
[OK] image: iacine-agent:4.0.0
$ syft iacine-agent:4.0.0 -o spdx
packages catalogued: 486
[OK] SBOM generated
$ trivy image iacine-agent:4.0.0
CRITICAL 0 · HIGH 0 · MEDIUM 3
[OK] Security policy passed
$ cosign sign iacine-agent:4.0.0
signature: sha256:4a8d•••91bf
[OK] Image signed
[ STAGE 08 / TERRAFORM ]
$ terraform init -upgrade
backend: s3/iacine-tfstate-prod
provider.aws v6.10.0
[OK] Terraform initialized
$ terraform workspace select prod
[OK] Workspace prod selected
$ terraform validate
[OK] Configuration valid
$ terraform plan -out=prod.tfplan
+ aws_vpc.ai_prod
+ aws_subnet.private_gpu[0]
+ aws_subnet.private_gpu[1]
+ aws_eks_cluster.iacine_ai
+ aws_eks_node_group.gpu_l40s
instance_types = [g6e.2xlarge]
desired_size = 3
+ aws_ecr_repository.agent
+ aws_opensearchserverless.collection
+ aws_s3_bucket.model_artifacts
+ aws_dynamodb_table.sessions
+ aws_lb.public_api
+ aws_wafv2_web_acl.api
+ aws_cloudwatch_log_group.inference
+ aws_iam_role.irsa_runtime
Plan: 29 add, 0 change, 0 destroy
[OK] Policy checks passed
$ terraform apply prod.tfplan
Creating VPC... done
Creating private subnets... done
Creating EKS control... done
Joining GPU nodes... done
Creating OpenSearch... done
Creating ALB + WAF... done
Creating observability... done
🎉 INFRASTRUCTURE PROVISIONED
[OK] Apply complete: 29 added
[ STAGE 09 / AWS DEPLOYMENT ]
$ aws ecr get-login-password | docker login
[OK] Login succeeded
$ docker push ecr/iacine-agent:4.0.0
layer 8c21... pushed
layer f19a... pushed
layer 6d04... pushed
[OK] Image pushed to ECR
$ kubectl apply -k k8s/overlays/prod
namespace/iacine-ai created
serviceaccount/runtime created
configmap/agent-config created
deployment/qwen-vllm created
deployment/rag-api created
service/inference created
hpa/inference created
pdb/inference created
networkpolicy/zero-trust created
[OK] Kubernetes manifests applied
$ kubectl rollout status deploy/qwen-vllm
Pulling model shards 1/4...
Pulling model shards 2/4...
Pulling model shards 3/4...
Pulling model shards 4/4...
Loading Qwen 3.6 27B AWQ...
node: EC2 g6e.2xlarge
8 vCPU · 64 GiB system RAM
GPU: 1× NVIDIA L40S 48 GB
framebuffer usable: 44.0 GiB
weights: 18.7 GB AWQ
max_model_len: 131,072
KV cache budget: 15.8 GiB
CUDA graphs + runtime: 4.1 GiB
GPU reservation: 40.4/44.0 GiB
tensor_parallel_size: 1
replica topology: 1 GPU / pod
Compiling CUDA graphs...
Warming inference engine...
[OK] 3/3 replicas available
[ STAGE 10 / CANARY ]
$ python deploy/canary.py --weight 10
Routing 10% traffic to v4
requests observed: 1,000
HTTP success 99.98%
p50 TTFT 310ms
p95 TTFT 690ms
p99 TTFT 1.04s
output throughput 38.4 tok/s
p95 E2E / 128 tok 4.21s
GPU utilization 76%
error rate 0.02%
[OK] Canary healthy
$ python deploy/promote.py --to 100
Traffic shift: 10% → 50%
Traffic shift: 50% → 100%
[OK] Production promoted
[ STAGE 11 / LIVE RAG TEST ]
$ curl -s api.iacine.tech/v1/agents/run
[REQ] trace=01J61Y3F9A
[ROUTER] intent=cyber_risk
[QUERY] rewriting question
[RETRIEVE] hybrid top_k=20
[RERANK] bge-reranker top_k=6
[CONTEXT] 6 chunks · 3 sources
[LLM] Qwen 3.6 27B · temp=0.2
[GUARDRAIL] prompt injection: clean
[ANSWER] 96 tokens generated
[LATENCY] retrieve 83ms
[LATENCY] rerank 41ms
[LATENCY] TTFT 287ms
[LATENCY] generation 2.42s
[LATENCY] total 2.65s
[OK] Grounded response · 3 citations
$ curl -s api.iacine.tech/health
{"status":"healthy","gpu":"ready"}
$ kubectl get pods -n iacine-ai
qwen-vllm-6c8f 1/1 Running
qwen-vllm-8a2d 1/1 Running
qwen-vllm-b714 1/1 Running
rag-api-75f9 1/1 Running
$ python observability/check.py
OpenTelemetry traces: flowing
CloudWatch metrics: flowing
Grafana dashboards: healthy
alarms: 0 firing
[OK] Observability operational
🎉 QWEN 3.6 27B + RAG IS LIVE
[ PRODUCTION SUMMARY ]
model Qwen 3.6 27B AWQ
RAG 84,219 vectors
token acc. 86.70%
Recall@5 91.30%
p95 TTFT 690ms
AWS eu-west-1
serving 3× g6e.2xlarge
replicas 3/3 healthy
[LIVE] Waiting for requests...
[REQ] POST /v1/chat 200
[REQ] POST /v1/embed 200
[REQ] POST /v1/agents/run 200
[CACHE] semantic hit 0.91
[REQ] GET /health 200
──────────────────────────────────
Telemetry replay in 5 seconds...
loop_id: qwen36-prod-v4
Agrandissez l'écran pour suivre toute la conversation.
Souhaitez-vous que cet avatar conserve votre historique pour vos prochaines visites ?
0:00
Votre voix n’est jamais enregistrée : seul le texte transcrit est conservé.
Oups, une erreur est survenue. Réessaie dans un instant.
Voir l'architecture →