Auto-Trigger-AWS-EC2 #4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Auto-Trigger-AWS-EC2 | |
on: | |
workflow_dispatch: | |
jobs: | |
launch-runner: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: iterative/setup-cml@v2 | |
- uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: ap-south-1 | |
- name: Deploy runner on AWS EC2 | |
env: | |
REPO_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
run: | | |
cml runner \ | |
--single \ | |
--labels=aws-test --cloud=aws --cloud-image="ami-009761097133eb6de" --cloud-region=ap-south-1 \ | |
--cloud-type=g4dn.xlarge --cloud-hdd-size=64 --cloud-spot --idle-timeout=100 --name cml-test-001 | |
train-and-report: | |
runs-on: [self-hosted, aws-test] | |
timeout-minutes: 10 # job gets cancelled if it runs for more than 10 minutes | |
# if you want you can specify the container | |
# container: | |
# image: docker://pytorch/pytorch:2.4.0-cuda12.4-cudnn9-runtime | |
# options: --gpus all | |
steps: | |
- name: Verify EC2 Instance | |
run: | | |
echo "Checking instance information..." | |
# Check if we're on EC2 | |
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") | |
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-type | |
echo "Checking system resources..." | |
lscpu | |
free -h | |
df -h | |
nvidia-smi # This will show GPU if available | |
echo "Checking environment..." | |
env | grep AWS || true | |
hostname | |
whoami | |
pwd | |
# Install the AWS CLI if not already available | |
if ! command -v aws &> /dev/null; then | |
apt-get update | |
apt-get install -y awscli | |
fi | |
- name: Set up AWS CLI credentials | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
AWS_DEFAULT_REGION: ap-south-1 # Change to your desired region | |
run: | | |
# Create the AWS config and credentials files | |
mkdir -p ~/.aws | |
echo "[default]" > ~/.aws/config | |
echo "region=${AWS_DEFAULT_REGION}" >> ~/.aws/config | |
echo "[default]" > ~/.aws/credentials | |
echo "aws_access_key_id=${AWS_ACCESS_KEY_ID}" >> ~/.aws/credentials | |
echo "aws_secret_access_key=${AWS_SECRET_ACCESS_KEY}" >> ~/.aws/credentials | |
- name: Test AWS CLI | |
run: | | |
# Now you can run any AWS CLI command | |
aws s3 ls # Example command to list S3 buckets | |
- name: Pull Docker image from docker hub | |
run: | | |
docker pull hello-world | |
- name: Run Docker image | |
run: | | |
docker run hello-world | |
- name: Clean previous images and containers | |
run: | | |
docker system prune -f |