📄 Deployment on EC2

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.*.* เท่านั้น