eda_trainning_lora / Dockerfile
Ademir
Initial clean commit: scripts and config without logs
d4a00b2
FROM huggingface/transformers-pytorch-gpu:latest
WORKDIR /app
# Instalar dependências do sistema
# python-is-python3 cria automaticamente o symlink python -> python3
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
python3 \
python3-pip \
python-is-python3 \
&& rm -rf /var/lib/apt/lists/*
# Verificar que python está disponível (entrypoint do NVIDIA precisa)
RUN python --version && \
python3 --version && \
echo "✅ Python disponível: $(which python)"
# Instalar dependências Python (constraint em torch = versão da imagem base, evita upgrade que quebra torchvision)
COPY requirements.txt .
RUN python3 -c "import torch; open('/tmp/constraints.txt','w').write('torch==' + torch.__version__.split('+')[0] + '\n')" && \
python3 -m pip install --no-cache-dir --upgrade pip && \
python3 -m pip install --no-cache-dir -r requirements.txt -c /tmp/constraints.txt && \
python3 -m pip install --no-cache-dir --upgrade torchvision && \
(python3 -m pip install --no-cache-dir nvidia-cuda-nvjitlink-cu12 || true) && \
python3 -m pip uninstall -y bitsandbytes 2>/dev/null || true
# Treino LoRA fp16 sem quantizacao: sem bitsandbytes (imagem base pode traze-lo; libnvJitLink incompativel)
ENV LD_LIBRARY_PATH=/usr/local/lib/python3.10/dist-packages/nvidia/cuda_nvjitlink/lib:/usr/local/lib/python3.10/dist-packages/nvidia/cuda_nvjitlink/lib/x86_64-linux-gnu:/usr/local/lib/python3.11/dist-packages/nvidia/cuda_nvjitlink/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cuda_nvjitlink/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH}
# Copiar scripts de treinamento
COPY training_env.py /app/training_env.py
COPY reporting.py /app/reporting.py
COPY space_lock.py /app/space_lock.py
COPY train.py /app/train.py
COPY app.py /app/app.py
COPY benchmarks/gold_sample.json /app/benchmarks/gold_sample.json
# Criar diretório de logs
RUN mkdir -p /app/logs
# Configurar variáveis de ambiente padrão (podem ser sobrescritas)
ENV MODEL_NAME=Qwen/Qwen2.5-1.5B-Instruct
ENV DATASET_REPO=beAnalytic/eda-training-dataset
ENV OUTPUT_REPO=beAnalytic/eda-llm-qwen2.5-lora
ENV OMP_NUM_THREADS=1
ENV PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
# T4 ~15GB: seq 256 por defeito (OOM com varios processos ou logits na loss); sobrescreve no Space
ENV MAX_SEQ_LENGTH=256
ENV PER_DEVICE_TRAIN_BATCH_SIZE=1
ENV PER_DEVICE_EVAL_BATCH_SIZE=1
ENV GRADIENT_ACCUMULATION_STEPS=8
# Executar treinamento
# Usar 'python' (que será o symlink para python3 criado acima)
# O entrypoint do NVIDIA espera 'python' estar disponível
CMD ["python", "/app/app.py"]