# Dependencias del contenedor de entrenamiento `qwen-lora-train` (docker-compose.yml). # # Por que existe este archivo (Fase 6, riesgo #3 del plan): el contenedor de las Fases 3-5 # fue borrado y NADA en el repo fijaba estas versiones. Todo el estado de pip se perdio. # Una version distinta de transformers puede cambiar la conversion de claves del checkpoint # (-> los nombres del adapter dejan de matchear lo que espera 20_merge_lora.py) o el # comportamiento de return_assistant_tokens_mask (-> el masking de 10_train.py entrena # sobre tokens de system/user/tool sin avisar). Las dos fallas son silenciosas. # # Instalar con: # docker exec qwen-lora-train pip install -c /workspace/ai-projects/qwen3-6-lora/constraints.txt \ # -r /workspace/ai-projects/qwen3-6-lora/requirements.train.txt # # El `-c constraints.txt` es obligatorio: fija torch al build de NGC que trae la imagen # (nvcr.io/nvidia/pytorch:25.12-py3, aarch64/GB10). Sin el, cualquiera de estos paquetes # puede arrastrar un torch de PyPI que no tiene el runtime CUDA de la imagen. # # Verificacion de que la instalacion quedo bien, antes de gastar una corrida: # 1. 01_inspect_modules.py sobre el checkpoint merged imprime `model.layers.*` # (no `model.language_model.layers.*`) # 2. el `trainable%` del smoke run de 2 pasos iguala al de la Fase 3 # Ambos estan en el runbook de la fase (pasos 6.2.7 y 6.4.20). transformers==5.14.1 peft==0.19.1 # Cuantizacion NVFP4 (21_quantize_nvfp4.py). llmcompressor 0.12.0 es la version con la que # se produjo el checkpoint que esta hoy en produccion. llmcompressor==0.12.0 accelerate datasets compressed-tensors safetensors # bitsandbytes: lo necesita optim="adamw_8bit" en 10_train.py. Sin el, TrainingArguments # falla al construir el optimizador, ya adentro de la corrida. bitsandbytes # NOTA: las cinco ultimas quedan sin pinear a proposito. Son aarch64/GB10 y no todas # publican wheel para toda version; pinear a ciegas rompe la instalacion en vez de fijarla. # Las versiones REALMENTE resueltas quedan registradas abajo. # # ORDEN DE INSTALACION -- NO es un solo `pip install -r`. # --------------------------------------------------------------------------------- # llmcompressor 0.12.0 declara `torch<=2.12.0,>=2.10.0`, y el torch de la imagen NGC es el # pre-release `2.10.0a0+b4e4ee81d3.nv25.12`. Para el resolvedor de pip un `a0` es ANTERIOR a # 2.10.0, asi que la restriccion no se satisface y el install entero falla con # ResolutionImpossible -- aunque el torch instalado sea perfectamente funcional. Por eso # llmcompressor y compressed-tensors se instalan con --no-deps y sus dependencias reales # (que no son torch) se instalan aparte: # # C=/workspace/ai-projects/qwen3-6-lora/constraints.txt # pip install --no-cache-dir -c $C transformers==5.14.1 peft==0.19.1 accelerate datasets \ # bitsandbytes safetensors # pip install --no-cache-dir --no-deps llmcompressor==0.12.0 compressed-tensors # pip install --no-cache-dir -c $C loguru pydantic tqdm numpy pillow requests # # Verificacion (los dos invariantes del riesgo #3 del plan de fase), ya corrida en 6.2.7: # - 01_inspect_modules.py sobre el merged imprime `model.layers.0.linear_attn.*` [OK] # - config.json del merged sha256-identico al del base (93a4693fa9d8392f...) [OK] # - keysets del index identicos: 1045 tensores, 690 bajo model.language_model.* [OK] # - el `trainable%` del smoke run iguala al de la Fase 3 [paso 6.4.20] # # VERSIONES RESUELTAS (pip freeze del contenedor, Fase 6, 2026-07-30): # torch==2.10.0a0+b4e4ee81d3.nv25.12 (de la imagen, via constraints.txt) # transformers==5.14.1 tokenizers==0.22.1 # peft==0.19.1 accelerate==1.14.0 # datasets==4.4.1 bitsandbytes==0.50.0 # llmcompressor==0.12.0 compressed-tensors==0.17.1 # safetensors==0.8.0 numpy==2.1.0 # loguru==0.7.3 pydantic==2.12.5