Trabajos GPU en GitHub Actions
Use la acción nodelodge/run para ejecutar un comando en una GPU desde un workflow, con un tope de costo estricto, y detener siempre la máquina.
La acción nodelodge/run ejecuta un comando en una máquina GPU Node Lodge Secure desde un workflow de GitHub Actions. Lanza la sesión, ejecuta su comando por SSH con la salida en el log del job, sube un directorio de salida como artefacto y siempre detiene la sesión, incluso cuando el job falla o se cancela.
Antes de empezar
- En la consola, abra Keys y cree una clave para el workflow con los alcances
workloads:readyworkloads:write. - Defina sus Spending limits (por sesión y total). Node Lodge rechaza cualquier sesión que superaría alguno, pida lo que pida el workflow.
- En su repositorio, añada la clave como secreto con el nombre
NODELODGE_API_KEY(Settings, Secrets and variables, Actions).
Un workflow
name: Fine-tune on a GPU
on:
workflow_dispatch:
permissions:
contents: read
jobs:
train:
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@v4
- name: Train on Node Lodge
id: gpu
uses: nodelodge/run@v1
with:
api-key: ${{ secrets.NODELODGE_API_KEY }}
max-cost-usd: '5'
min-vram-gb: '48'
image: pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime
upload-dir: training
command: |
pip install -r requirements.txt
python train.py --epochs 3 --out output/
timeout-minutes: '60'
output-dir: output
artifact-name: model
La carpeta training de su repositorio se copia a la máquina, el comando se ejecuta allí en el contenedor de PyTorch y la carpeta output vuelve como el artefacto model de la ejecución. Las salidas del paso indican el id de la sesión, el código de salida del comando y lo que costó la sesión.
Entradas
| Entrada | |
|---|---|
api-key |
Obligatoria. La clave, desde un secreto. |
max-cost-usd |
Obligatoria. Lo máximo que puede costar la ejecución. |
command |
Obligatoria. Se ejecuta con sh -c en el directorio de trabajo. |
offer, o gpu y min-vram-gb |
Qué máquina: un id de oferta, o la máquina reservable más barata que coincida. |
image |
Ejecuta el comando en este contenedor, con el directorio de trabajo en /workspace. Sin ella, el comando se ejecuta en la propia máquina. |
timeout-minutes |
Lo máximo que puede durar el comando (60 por defecto). |
upload-dir |
Una carpeta del repositorio que se copia antes a la máquina. |
output-dir, artifact-name |
La carpeta que se sube después del comando, incluso si falla, y el nombre de su artefacto. |
allow-cidr |
La dirección autorizada a llegar a la máquina por SSH. Por defecto: la dirección del propio runner. |
Cómo el costo se mantiene bajo su tope
max-cost-usdes el presupuesto de la sesión, reservado sobre su crédito al lanzarla. Node Lodge lo compara con su crédito disponible y los límites de la clave, y rechaza la ejecución antes de iniciar nada si no cabe.- La facturación sigue el tiempo real en que la máquina está en marcha, y Budget Guard detiene la sesión antes de que se gaste el presupuesto.
- El comando se detiene al llegar a
timeout-minutes(código de salida 124) y la sesión se detiene justo después. Paga por el tiempo en marcha, y el resto del presupuesto se libera. - Un paso posterior detiene la sesión si el job se canceló o si la primera detención falló. Si eso también falla, el job falla y su log indica qué sesión detener en la consola.
Seguridad
- La clave se enmascara en el log. Guárdela en un secreto y dé a cada workflow su propia clave con límites ajustados.
- El par de claves SSH se crea para la ejecución y nunca sale del runner. Solo la dirección del runner puede llegar a la máquina.
- Detener la sesión elimina la máquina y su disco. Todo lo que necesite debe estar en
output-dir.
Para las claves de API y sus límites, consulte Inicio rápido de la API. Para controlar sesiones desde un agente de IA, consulte Use Node Lodge desde un agente de IA (MCP).