Download scripts/aws/test_basic_setup.sh from augustocsc/test_base_infix_1epoch: direct link, hf CLI and curl.
- Browser
- Download file 5.01 kB
-
https://huggingface.co/augustocsc/test_base_infix_1epoch/resolve/main/scripts/aws/test_basic_setup.sh
- Command line
-
hf download hf://augustocsc/test_base_infix_1epoch/scripts/aws/test_basic_setup.sh
-
curl -L -o test_basic_setup.sh https://huggingface.co/augustocsc/test_base_infix_1epoch/resolve/main/scripts/aws/test_basic_setup.sh
5.01 kB
| # Script de teste básico para verificar setup AWS e chaves | |
| # Lança instância, roda teste simples, e para a instância | |
| set -e | |
| echo "==========================================" | |
| echo "TESTE BÁSICO DE SETUP AWS" | |
| echo "==========================================" | |
| echo | |
| # Carregar tokens | |
| 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 | |
| # Criar user-data script simples | |
| cat > /tmp/userdata_test.sh << 'EOF' | |
| #!/bin/bash | |
| set -x | |
| exec > >(tee /home/ubuntu/test_setup.log) | |
| exec 2>&1 | |
| echo "=== Iniciando teste básico ===" | |
| cd /home/ubuntu | |
| # Clone repo | |
| git clone https://github.com/augustocsc/seriguela.git | |
| cd seriguela | |
| git checkout experiment/ppo-symbolic-regression | |
| # Setup Python | |
| python3 -m venv .venv | |
| source .venv/bin/activate | |
| # Install minimal dependencies | |
| pip install -q transformers torch --index-url https://download.pytorch.org/whl/cu121 | |
| pip install -q peft datasets | |
| # Teste simples: gerar 5 expressões com modelo base | |
| 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 | |
| # Substituir variáveis | |
| 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 | |
| # Lançar instância | |
| 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 | |
| # Aguardar instância estar running | |
| echo "⏳ Aguardando instância ficar running..." | |
| aws ec2 wait instance-running --instance-ids $INSTANCE_ID | |
| echo "✅ Instância running" | |
| echo | |
| # Pegar IP público | |
| 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 | |
| # Aguardar SSH estar disponível | |
| 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 | |
| # Aguardar teste completar (max 10 minutos) | |
| 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 | |
| # Mostrar log | |
| echo "==========================================" | |
| echo "LOG DO TESTE:" | |
| echo "==========================================" | |
| ssh -i ~/chave-gpu.pem -o StrictHostKeyChecking=no ubuntu@$PUBLIC_IP "tail -50 test_setup.log" | |
| echo | |
| # Parar instância | |
| 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" | |