Update documentation to reflect migration from FastAPI/Uvicorn to Rust/Axum with ONNX Runtime: - Root README: Update ML service description, tech stack, prerequisites, and run instructions to use Rust/Cargo instead of Python/Uvicorn - Root README: Update model path references from best_model.keras to model.onnx - Root README: Add model.onnx to artifact lists and generated files - Root README: Update troubleshooting section with Rust-specific guidance - Machine_Learning/README: Add table of contents entry for ONNX conversion - Machine_Learning/README: Add Tahap 5 section documenting ONNX conversion with convert_onnx.py and validate_onnx_parity.py - Machine_Learning/README: Update output table to include model.onnx with Rust ONNX Runtime usage - apps/ml-service/README: Create comprehensive documentation for Rust Axum ONNX service including setup, endpoints, environment variables, testing, and troubleshooting Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.8 KiB
ML Service — Rust Axum ONNX Runtime
Layanan inferensi machine learning berbasis Rust dengan Axum web framework dan ONNX Runtime untuk klasifikasi penyakit daun jagung. Service ini menyediakan endpoint HTTP untuk prediksi real-time dengan performa tinggi dan konsumsi resource minimal.
Fitur
- Framework: Axum (async Rust web framework)
- Runtime Inferensi: ONNX Runtime untuk kompatibilitas lintas platform
- Model: EfficientNetV2B0 dalam format ONNX
- Endpoint: Health check, metadata, dan prediksi gambar
- Multipart Upload: Dukungan upload gambar langsung via HTTP POST
Prasyarat
- Rust 1.70+ dan Cargo
- Model ONNX di
../../Machine_Learning/model/model.onnx(atau path custom viaMODEL_PATH)
Instalasi & Setup
Instalasi Dependensi
Dependensi Rust sudah terdaftar di Cargo.toml. Cargo akan mengunduh dan mengkompilasi otomatis saat pertama kali build.
cargo build
Menjalankan Service Lokal
Opsi 1: Default (Model dari Machine_Learning/)
cargo run
Service akan mencari model di path default:
../../Machine_Learning/model/model.onnx
Opsi 2: Custom Model Path
Jika model berada di lokasi lain, gunakan environment variable MODEL_PATH:
MODEL_PATH=/path/to/model.onnx cargo run
Service akan mendengarkan di http://localhost:8000 secara default.
Environment Variables
| Variable | Default | Keterangan |
|---|---|---|
MODEL_PATH |
../../Machine_Learning/model/model.onnx |
Path ke file model ONNX |
MODEL_INPUT_SIZE |
224 |
Ukuran input gambar (224x224 untuk EfficientNetV2B0) |
RUST_LOG |
info |
Level logging (debug, info, warn, error) |
Endpoint API
1. Health Check
curl http://localhost:8000/health
Response:
{
"status": "ok",
"model_loaded": true,
"model_path": "../../Machine_Learning/model/model.onnx"
}
2. Metadata
curl http://localhost:8000/metadata
Response:
{
"service": "ZeaVis ML Service",
"version": "0.1.0",
"model_path": "../../Machine_Learning/model/model.onnx",
"input_size": 224,
"labels": [
"Bercak Daun",
"Hawar Daun",
"Karat Daun",
"Daun Sehat"
]
}
3. Prediksi
Upload gambar daun jagung untuk klasifikasi:
curl -X POST http://localhost:8000/predict \
-F "file=@/path/to/corn-leaf.jpg"
Response:
{
"predictions": [
{
"label": "Daun Sehat",
"confidence": 0.95
},
{
"label": "Bercak Daun",
"confidence": 0.03
},
{
"label": "Hawar Daun",
"confidence": 0.01
},
{
"label": "Karat Daun",
"confidence": 0.01
}
],
"top_prediction": {
"label": "Daun Sehat",
"confidence": 0.95
}
}
Verifikasi & Testing
Build Produksi
cargo build --release
Output binary akan tersedia di target/release/zeavis-ml-service.
Menjalankan Tests
cargo test
Tests mencakup validasi loading model, preprocessing gambar, dan output prediksi.
Verifikasi Manual
-
Jalankan service:
cargo run -
Di terminal lain, test health endpoint:
curl http://localhost:8000/health -
Test metadata:
curl http://localhost:8000/metadata -
Test prediksi dengan gambar sample:
curl -X POST http://localhost:8000/predict \ -F "file=@../../Machine_Learning/dataset/Daun\ Sehat/sample.jpg"
Troubleshooting
Model tidak ditemukan
Error: Failed to load model: No such file or directory
Solusi: Pastikan file model tersedia di path yang benar:
ls -la ../../Machine_Learning/model/model.onnx
Atau set path custom:
MODEL_PATH=/absolute/path/to/model.onnx cargo run
Port sudah digunakan
Error: Address already in use
Solusi: Service menggunakan port 8000. Jika port sudah digunakan, ubah di source code atau gunakan port forwarding.
ONNX Runtime tidak kompatibel
Error: ONNX Runtime initialization failed
Solusi: Pastikan ONNX Runtime binary kompatibel dengan sistem operasi. Cargo akan mengunduh binary yang sesuai otomatis. Jika masalah persisten, coba rebuild:
cargo clean
cargo build
Deployment
Docker
Service dapat di-deploy via Docker. Dockerfile sudah tersedia di direktori ini.
docker build -t zeavis-ml-service .
docker run -p 8000:8000 \
-v /path/to/model.onnx:/app/model.onnx \
-e MODEL_PATH=/app/model.onnx \
zeavis-ml-service
Docker Compose
Lihat docker-compose.yml di root repository untuk deployment lengkap dengan web, API, dan ML service.
Dokumentasi Terkait
Machine_Learning/README.md— Panduan training dan ekspor model ONNXREADME.md— Dokumentasi proyek utama