CS643 — Project 2 (PA2) — Distributed Machine Learning Pipeline with Docker
Name- Kesha Dave
Links
Dockerhub link https://hub.docker.com/repository/docker/kesha1104/cs643-wine-kesha/general
Github link https://github.com/kesha1104/cs643-853-pa2-kd473
Quick summary
- Training: parallel Spark training on 4 EC2 instances (use AWS EMR / Flintrock / other). Save model to S3.
- Prediction: single EC2 instance (without Docker), then build and deploy a Docker container for prediction on an EC2 instance.
Prerequisites
- AWS account with IAM permissions, AWS CLI configured.
- Java 11+, Python 3.8+, Docker (for container step).
Parallel training (4 EC2 nodes) — minimal steps
- Upload code + data to S3:
aws s3 cp TrainingDataset.csv s3://my-bucket/datasets/TrainingDataset.csv
aws s3 cp ValidationDataset.csv s3://my-bucket/datasets/ValidationDataset.csv
aws s3 sync . s3://my-bucket/code/ --exclude '.git/*' --exclude 'model_lr/*'- Create an EMR cluster (1 master + 4 core) via Console or CLI (example CLI skeleton):
aws emr create-cluster --name "cs643-pa2" --release-label emr-6.12.0 \
--applications Name=Spark --ec2-attributes KeyName=Proj_key2\
--instance-type m5.xlarge --instance-count 5 --use-default-roles- Submit training step (spark-submit on cluster, use S3 paths):
spark-submit --master yarn --deploy-mode cluster \
s3://my-bucket/code/train.py \
s3://my-bucket/datasets/TrainingDataset.csv \
s3://my-bucket/datasets/ValidationDataset.csv \
s3://my-bucket/models/model_lrPrediction on single EC2 (no Docker)
- Launch one EC2 instance and SSH in.
- Install Java, Python, pip and clone your private repo (or download code from S3).
- If model is on S3, download it locally:
aws s3 cp --recursive s3://my-bucket/models/model_lr ./model_lr- Install Python requirements (fix
requirements.txtfirst — no markdown fences):
pip install -r requirements.txt- Run prediction:
python predict.py model_lr ValidationDataset.csvThe script prints F1=<0.5718362260106016>.
Build and deploy Docker image for prediction
- Locally (or on EC2) build and tag image:
docker build -t dockerhub_username/wine-predict:latest .
docker push dockerhub_username/wine-predict:latest- Run container on EC2. If you need to mount local model and data into the container use
-v:
# example: host has /home/ubuntu/model_lr and /home/ubuntu/ValidationDataset.csv
sudo docker run --rm -v /home/ubuntu/model_lr:/app/model_lr -v /home/ubuntu/ValidationDataset.csv:/app/ValidationDataset.csv \
dockerhub_username/wine-predict:latestOr pass custom args (if ENTRYPOINT accepts args):
sudo docker run --rm -v /host/model_lr:/app/model_lr -v /host/ValidationDataset.csv:/app/ValidationDataset.csv \
dockerhub_username/wine-predict:latest model_lr ValidationDataset.csv