Modos de lanzamiento
El modo de lanzamiento decide qué se ejecuta realmente cuando arranca su contenedor, qué puertos se publican y si su script de inicio llega a aplicarse. Es el campo de mayor consecuencia de una plantilla.
Los cuatro modos
args | ssh | jupyter | vm | |
|---|---|---|---|---|
| Qué arranca | el entrypoint propio de la imagen | el entrypoint de la imagen base: sshd en el puerto 22 | sshd más JupyterLab sobre HTTPS | una máquina virtual KVM completa |
| Imagen derivada de la base | no se requiere | se requiere | se requiere | no se requiere |
| Puertos implícitos | ninguno | 22 antepuesto, etiquetado ssh | 22 (ssh) y 8080 (jupyter) antepuestos | 22 antepuesto, etiquetado ssh |
| Sus puertos declarados | se publican tal cual | se agregan después del 22, etiquetados app | se agregan después del 22 y el 8080, etiquetados app | se agregan después del 22, etiquetados app |
args_str | se divide para formar el comando del contenedor | se ignora | se ignora | se ignora |
onstart | no se aplica | se ejecuta una vez en el primer arranque | se ejecuta una vez en el primer arranque | se envía con el lanzamiento |
| Requisito de la oferta | ninguno | ninguno | ninguno | una oferta compatible con VM |
| Cómo se conecta | con sus propios puertos publicados | SSH | el botón Abrir JupyterLab, o SSH | SSH |
args
El predeterminado. Superheat ejecuta su imagen exactamente como la concibió su autor: el entrypoint nativo de la imagen, con args_str dividido en el comando según las reglas de palabras del shell. --model llama-3 --port 8000 se convierte en cuatro argumentos.
No se inyecta nada en la ruta de arranque, y por eso onstart no tiene efecto aquí: no hay ningún entrypoint de Superheat que lo ejecute. Si necesita trabajo de preparación en modo args, inclúyalo en la imagen o haga que sea lo primero que hace su comando.
Use args para servidores de inferencia, trabajos de entrenamiento y cualquier imagen upstream que usted no haya construido.
ssh
Arranca el entrypoint base de Superheat, que instala su clave pública en /root/.ssh/authorized_keys, inicia sshd en el puerto 22 del contenedor, ejecuta su script de inicio una vez y luego cede el control al CMD de la imagen (o queda inactivo para que el contenedor siga en pie).
El puerto 22 del contenedor se antepone a la lista de puertos automáticamente; usted no lo declara. El puerto del lado del host se asigna desde el rango publicado de la máquina y nunca es el 22 — la página de la instancia le muestra la cadena de conexión completa.
Use ssh cuando quiera una máquina en la que trabajar, no un servicio al que llamar.
jupyter
Todo lo que hace ssh, más JupyterLab. Se anteponen los puertos de contenedor 22 y 8080. Jupyter se enlaza a 0.0.0.0:8080 sobre HTTPS con un certificado autofirmado, con raíz en su Directorio de trabajo de Jupyter (/workspace de forma predeterminada). Desactivar el interruptor JupyterLab sirve en su lugar el notebook clásico.
El token de acceso lo genera la plataforma, se pasa al contenedor y no se devuelve en ninguna respuesta de la API. La consola arma el enlace Abrir JupyterLab con el token ya incluido, que es la única forma de obtenerlo.
Jupyter se sirve sobre HTTPS con un certificado autofirmado para que el token y el tráfico de sus notebooks viajen cifrados por la ruta directa. La advertencia es esperable.
vm
Una máquina virtual KVM completa en lugar de un contenedor. Las plantillas de VM solo se lanzan sobre una oferta cuyo host sea compatible con VM. En la página de despliegue, una plantilla de VM elegida frente a una oferta no compatible con VM no se puede seleccionar, con "Esta máquina no es compatible con VM." como motivo, y el botón Desplegar sigue deshabilitado; la API impone la misma regla y devuelve 422 OFFER_NOT_VM_CAPABLE. El lanzamiento se compila con acceso SSH, así que se conecta igual que lo haría en modo ssh.
No se requiere una imagen derivada de la base, porque la VM no ejecuta el entrypoint del contenedor.
Por qué ssh y jupyter necesitan una imagen derivada de la base
Una imagen upstream simple como pytorch/pytorch no incluye sshd ni JupyterLab, así que no hay nada que esos modos puedan iniciar. Superheat detecta que una imagen es utilizable por la etiqueta com.superheat.base, que define la imagen base publicada y hereda todo lo que se construye FROM ella.
Si apunta una plantilla ssh o jupyter a una imagen que no lleva esa etiqueta, el lanzamiento no tiene nada que arrancar. O construye su imagen sobre la base — consulte Imagen base — o cambia la plantilla a args.
Precedencia de puertos
Después de anteponer los puertos implícitos, la lista se deduplica por puerto de contenedor y protocolo, y gana la entrada de mayor prioridad:
ssh / jupyter > open_button > app
Ese orden le permite declarar un puerto en la lista de puertos y apuntar el botón Abrir a él: la entrada vuelve etiquetada como open_button en lugar de app. También significa que declarar usted mismo el 22 o el 8080 en modo ssh o jupyter no cambia nada: la entrada implícita conserva su rol.
Consulte Puertos para ver las etiquetas y el botón Abrir.
Cambiar de modo después
El modo de lanzamiento forma parte de la receta de lanzamiento, así que editarlo vuelve a generar el hash_id de la plantilla y cualquier enlace compartido fijado deja de resolverse. Las instancias en ejecución no se ven afectadas: conservan la receta con la que se lanzaron.