Deployment on EC2
Setup & Deployment Guide
AE Inference System on EC2 (Docker, Production)
เอกสารนี้อธิบายขั้นตอนการเตรียม EC2, การ build และ deploy ระบบ AE Inference ด้วย Docker แบบ queue-based เพื่อให้ inference ทำงาน เรียงทีละ job, ไม่ชนกัน, และรองรับการ scale ตามจำนวน site
1. EC2 Environment Preparation
1.1 Instance Selection
OS: Ubuntu Server 20.04 / 22.04 LTS
Architecture:
arm64 (แนะนำ – AWS Graviton, cost/performance ดี)
amd64 (กรณี build x86)
Instance Type (ตัวอย่าง)
t4g.large / t4g.xlarge (ARM64, CPU inference)
ปรับตาม workload ของโมเดล
1.2 System Update
sudo apt update && sudo apt upgrade -y
1.3 Install Docker
sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
ตรวจสอบ:
docker --version
Production แนะนำ ใช้ sudo docker เพื่อหลีกเลี่ยง permission issue
1.4 Directory Structure (มาตรฐานระบบ)
/etc/wha_ml/
├── .env.SRTDxxx.Axx # config ต่อ site / area
├── data/ # data per site
├── run_all.sh # script รัน worker ทั้งหมด
├── ae-inference-arm64.tar # inference image
├── ae-scheduler_arm64.tar # scheduler image
└── requirements.txt
1.5 Shared Lock & Queue Directory
ใช้สำหรับควบคุม job execution ให้รันทีละงาน
sudo mkdir -p /opt/ae-lock/queue /opt/ae-lock/running
sudo chmod -R 777 /opt/ae-lock
2. Local Development (Python Environment)
ใช้พัฒนา / debug ก่อน build container
2.1 Create Virtual Environment
python3 -m venv whamlenv
source whamlenv/bin/activate
2.2 Install Dependencies
pip install --upgrade pip
pip install watchfiles python-dotenv
pip install -r requirements.txt
3. Local / Dev with Docker Compose
สำหรับทดสอบ container บนเครื่อง local
3.1 Build Image (No Cache)
docker compose build --no-cache
3.2 Start Containers
docker compose up -d
3.3 View Logs
docker logs -f ae_inference_SRTD003_1
4. Production Image Build (ARM64)
4.1 Build Inference Image
docker buildx build \
--platform linux/arm64 \
--load \
-t ae-inference:arm64 \
.
4.2 Export Image to .tar
docker save ae-inference:arm64 -o ae-inference-arm64.tar
5. Clean Up Old Containers (Production)
sudo docker ps -a --filter "name=ae_inference" -q | xargs -r sudo docker rm -f
6. Load Docker Image on EC2
sudo docker load -i ae-inference-arm64.tar
ตรวจสอบ:
docker images | grep ae-inference
7. Run Inference Worker Containers
1 container = 1 site / area
Worker จะ idle จนกว่าจะมี job จาก scheduler
7.1 Run Single Worker (Example)
sudo docker run -d \
--restart=always \
--name ae_inference_SRTD003_A01 \
--env-file .env.SRTD003.A01 \
-v /etc/wha_ml/data/SRTD003-A01:/data \
-v /opt/ae-lock:/lock \
ae-inference:arm64
7.2 Run All Workers (Recommended)
chmod +x run_all.sh
./run_all.sh
8. Scheduler Setup (Queue-Based Execution)
Scheduler ทำหน้าที่ enqueue งานจาก .env.*.*
และควบคุมให้ inference รัน ทีละ job
8.1 Build Scheduler Image
sudo docker build --no-cache -t ae-scheduler:arm64 .
8.2 (Optional) Export Scheduler Image
docker save ae-scheduler:arm64 -o ae-scheduler_arm64.tar
8.3 Clear Queue (Fresh Start)
sudo rm -f /opt/ae-lock/queue/* /opt/ae-lock/running/*
8.4 Run Scheduler (Single Instance)
sudo docker run -d \
--restart=always \
--name ae_scheduler \
-v /opt/ae-lock:/lock \
-v /etc/wha_ml:/env \
ae-scheduler:arm64
9. Post-Deployment Verification
9.1 Scheduler Log
sudo docker logs -f ae_scheduler
ต้องเห็น:
➕ enqueue SRTDxxx_Axx
9.2 Queue / Running Status
ls /opt/ae-lock/queue
ls /opt/ae-lock/running
queue → งานรอ
running → งานที่กำลังรัน (ไม่ควรเกิน 1)
9.3 Worker Log
docker logs -f ae_inference_SRTD003_A01
10. Operational Notes
Scheduler รันแค่ 1 ตัว
Worker scale ตามจำนวน site
Queue-based design → ไม่ชนกัน
EC2 reboot → Docker restart อัตโนมัติ
รองรับการเพิ่ม site โดยเพิ่ม .env.*.* เท่านั้น