| #!/bin/bash |
| |
| |
|
|
| set -e |
|
|
| echo "==========================================" |
| echo "TESTE BÁSICO DE SETUP AWS" |
| echo "==========================================" |
| echo |
|
|
| |
| WANDB_KEY=$(cat ~/.tokens.txt | grep wandb | cut -d= -f2 | tr -d ' ') |
| HF_TOKEN=$(cat ~/.tokens.txt | grep huggingface | cut -d= -f2 | tr -d ' ') |
|
|
| if [ -z "$WANDB_KEY" ] || [ -z "$HF_TOKEN" ]; then |
| echo "❌ ERRO: Tokens não encontrados em ~/.tokens.txt" |
| exit 1 |
| fi |
|
|
| echo "✅ Tokens carregados" |
| echo |
|
|
| |
| cat > /tmp/userdata_test.sh << 'EOF' |
| |
| set -x |
| exec > >(tee /home/ubuntu/test_setup.log) |
| exec 2>&1 |
|
|
| echo "=== Iniciando teste básico ===" |
| cd /home/ubuntu |
|
|
| |
| git clone https://github.com/augustocsc/seriguela.git |
| cd seriguela |
| git checkout experiment/ppo-symbolic-regression |
|
|
| |
| python3 -m venv .venv |
| source .venv/bin/activate |
|
|
| |
| pip install -q transformers torch --index-url https://download.pytorch.org/whl/cu121 |
| pip install -q peft datasets |
|
|
| |
| cat > test_generate.py << 'PYTEST' |
| from transformers import AutoTokenizer, AutoModelForCausalLM |
| import torch |
|
|
| print("Loading tokenizer...") |
| tokenizer = AutoTokenizer.from_pretrained("gpt2") |
| tokenizer.pad_token = tokenizer.eos_token |
|
|
| print("Loading model...") |
| model = AutoModelForCausalLM.from_pretrained("gpt2") |
| model.eval() |
|
|
| prompt = '{"vars": ["x"], "ops": ["+", "*"], "cons": "C", "expr": "' |
| print(f"\nPrompt: {prompt}") |
|
|
| inputs = tokenizer(prompt, return_tensors="pt") |
|
|
| print("\nGenerating 5 expressions...") |
| for i in range(5): |
| with torch.no_grad(): |
| outputs = model.generate( |
| **inputs, |
| max_new_tokens=50, |
| temperature=0.7, |
| do_sample=True, |
| pad_token_id=tokenizer.eos_token_id |
| ) |
|
|
| text = tokenizer.decode(outputs[0], skip_special_tokens=True) |
| try: |
| expr = text.split('"expr": "')[1].split('"')[0] |
| print(f" {i+1}. {expr}") |
| except: |
| print(f" {i+1}. [failed to parse]") |
|
|
| print("\n✅ Teste básico concluído com sucesso!") |
| echo "SETUP_TEST_SUCCESS" > /home/ubuntu/.test_complete |
| PYTEST |
|
|
| python test_generate.py |
|
|
| echo "=== Teste básico finalizado ===" |
| echo "COMPLETE" > /home/ubuntu/.setup_complete |
| EOF |
|
|
| |
| sed -i "s/YOUR_WANDB_KEY/$WANDB_KEY/g" /tmp/userdata_test.sh |
| sed -i "s/YOUR_HF_TOKEN/$HF_TOKEN/g" /tmp/userdata_test.sh |
|
|
| |
| echo "🚀 Lançando instância g5.xlarge para teste..." |
| INSTANCE_ID=$(aws ec2 run-instances \ |
| --image-id ami-0e2c8caa4b6378d8c \ |
| --instance-type g5.xlarge \ |
| --key-name chave-gpu \ |
| --security-group-ids sg-0deaa73e23482e3f6 \ |
| --iam-instance-profile Name=ecsInstanceRole \ |
| --block-device-mappings 'DeviceName=/dev/sda1,Ebs={VolumeSize=50,VolumeType=gp3}' \ |
| --user-data file:///tmp/userdata_test.sh \ |
| --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=seriguela-test-setup}]' \ |
| --query 'Instances[0].InstanceId' \ |
| --output text) |
|
|
| echo "✅ Instância criada: $INSTANCE_ID" |
| echo |
|
|
| |
| echo "⏳ Aguardando instância ficar running..." |
| aws ec2 wait instance-running --instance-ids $INSTANCE_ID |
| echo "✅ Instância running" |
| echo |
|
|
| |
| PUBLIC_IP=$(aws ec2 describe-instances \ |
| --instance-ids $INSTANCE_ID \ |
| --query 'Reservations[0].Instances[0].PublicIpAddress' \ |
| --output text) |
|
|
| echo "📍 IP público: $PUBLIC_IP" |
| echo |
|
|
| |
| echo "⏳ Aguardando SSH ficar disponível..." |
| for i in {1..30}; do |
| if ssh -i ~/chave-gpu.pem -o StrictHostKeyChecking=no -o ConnectTimeout=5 ubuntu@$PUBLIC_IP "echo ok" 2>/dev/null; then |
| echo "✅ SSH disponível" |
| break |
| fi |
| echo " Tentativa $i/30..." |
| sleep 10 |
| done |
|
|
| echo |
|
|
| |
| echo "⏳ Aguardando teste completar (max 10 minutos)..." |
| for i in {1..60}; do |
| if ssh -i ~/chave-gpu.pem -o StrictHostKeyChecking=no ubuntu@$PUBLIC_IP "test -f .test_complete" 2>/dev/null; then |
| echo "✅ Teste completado!" |
| break |
| fi |
| echo " Aguardando... ($i/60)" |
| sleep 10 |
| done |
|
|
| echo |
|
|
| |
| echo "==========================================" |
| echo "LOG DO TESTE:" |
| echo "==========================================" |
| ssh -i ~/chave-gpu.pem -o StrictHostKeyChecking=no ubuntu@$PUBLIC_IP "tail -50 test_setup.log" |
| echo |
|
|
| |
| echo "🛑 Parando instância..." |
| aws ec2 stop-instances --instance-ids $INSTANCE_ID |
| echo "✅ Instância $INSTANCE_ID parada" |
| echo |
|
|
| echo "==========================================" |
| echo "✅ TESTE BÁSICO CONCLUÍDO!" |
| echo "==========================================" |
| echo |
| echo "Instância: $INSTANCE_ID (STOPPED)" |
| echo "IP usado: $PUBLIC_IP" |
| echo |
| echo "Para deletar a instância:" |
| echo " aws ec2 terminate-instances --instance-ids $INSTANCE_ID" |
|
|