Demo FastAPI + Ray Client để chạy tác vụ song song và expose endpoint kiểm tra.
- Docker (khuyến nghị) hoặc Python 3.12
- Ray cluster chạy cục bộ (head node) và mở Ray Client
- Cài Ray CLI (nếu chưa có):
pip install -U "ray[default]"- Khởi chạy head node kèm Ray Client và Dashboard:
ray stop # tùy chọn, để dọn dẹp các phiên Ray cũ
ray start --head --port=6380 --dashboard-port=8265 --ray-client-server-port=10001- Dashboard: http://127.0.0.1:8265
- Ray Client sẽ lắng nghe tại
127.0.0.1:10001
- Dùng Docker (khuyến nghị trên macOS):
docker build -t ray-demo .
docker run --rm -p 8000:8000 ray-demoGhi chú:
-
Ứng dụng trong container kết nối Ray qua
ray://host.docker.internal:10001(đã cấu hình trongmain.py). -
Trên Linux, nếu cần, thêm:
--add-host=host.docker.internal:host-gatewaykhidocker run. -
Chạy local (không Docker):
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000Ghi chú: Nếu không dùng Docker, bạn có thể chỉnh địa chỉ trong main.py thành ray://127.0.0.1:10001 để kết nối Ray Client local.
Sau khi API chạy ở http://localhost:8000, gọi endpoint sau:
curl http://localhost:8000/run-tasksKỳ vọng response dạng:
{
"status": "Tasks completed",
"results": [
"Kết quả của task 0",
"Kết quả của task 1",
"..."
]
}Logs trong server sẽ hiển thị quá trình các task chạy song song.
Bạn có thể chạy trực tiếp script thử nghiệm:
python ray_test.pyScript này kết nối Ray ở 127.0.0.1:6380 và submit 10 task song song.
ray stopmain.py: FastAPI với endpoint/run-tasksdùng Ray Clientray_test.py: Script thử Ray trực tiếp (không qua API)Dockerfile: Chạy FastAPI bằng Uvicornrequirements.txt: Phụ thuộc Python (FastAPI, Uvicorn, Ray Client)