Kaggle Ollama Bootstrap Linux - start.sh, stop.sh, status.sh, server.py for T4x2 GPU backend
  • Python 64.5%
  • Shell 35.5%
Find a file
2026-11-04 16:30:32 +01:00
kaggle Almost final version 2026-11-04 16:18:27 +01:00
.env.example feat(tunnel): supervise named Cloudflare tunnel and untrack .env 2026-11-03 15:52:58 +01:00
.gitignore Almost final version 2026-11-04 16:18:27 +01:00
architecture.png Almost final version 2026-11-04 16:18:27 +01:00
flow.png Almost final version 2026-11-04 16:18:27 +01:00
kaggle-ollama.zip Almost final version 2026-11-04 16:18:27 +01:00
KAGGLE_OLLAMA_ARCHITECTURE_RUNBOOK_v2.md Almost final version 2026-11-04 16:18:27 +01:00
README.md Update README.md 2026-11-04 16:30:32 +01:00
start.sh Almost final version 2026-11-04 16:18:27 +01:00
status.sh Almost final version 2026-11-04 16:18:27 +01:00
stop.sh Almost final version 2026-11-04 16:18:27 +01:00

Kaggle Ollama

Backend de Ollama ejecutado sobre GPUs de Kaggle, con persistencia de modelos mediante Kaggle Datasets y exposición segura mediante Cloudflare Tunnel + Access.

La documentación completa de arquitectura, configuración y despliegue está en:

KAGGLE_OLLAMA_ARCHITECTURE_RUNBOOK_v2.md

Arquitectura

Linux host     = Control Plane
Kaggle         = Compute Plane
Kaggle Dataset = Storage Plane
Cloudflare     = Ingress + Security Plane
OpenCode       = Client Plane

Flujo principal:

Linux host
   |
   | kaggle kernels push
   v
Kaggle Kernel
   |
   +--> 2x GPU
   +--> Ollama
   +--> Persistent models
   +--> cloudflared
              |
              v
      Cloudflare Tunnel
              |
      Cloudflare Access
              |
              v
       OpenCode / API

Estructura

.
├── .env
├── README.md
├── start.sh
├── status.sh
├── stop.sh
├── usage.json
└── kaggle/
    ├── config.json
    ├── kernel-metadata.json
    ├── runtime-config.json
    └── server.py

runtime-config.json se conserva actualmente por compatibilidad, pero el server.py actual no depende de él.

Requisitos locales

  • Linux
  • Bash
  • Python 3
  • curl
  • Kaggle CLI
  • Kaggle API Token
  • Cloudflare Access Service Token

.env

Crear:

.env

con:

KAGGLE_API_TOKEN=KGAT_xxxxxxxxxxxxxxxxx

CF_ACCESS_CLIENT_ID=xxxxxxxxxxxxxxxx.access
CF_ACCESS_CLIENT_SECRET=xxxxxxxxxxxxxxxx

KAGGLE_KERNEL_SLUG=usuario/ollama-gpu-server
KAGGLE_OLLAMA_ENDPOINT=https://ollama.example.com

Proteger:

chmod 600 .env

No versionar .env.

Datasets privados de Kaggle

El Kernel utiliza:

<usuario>/cloudflared-token
<usuario>/kaggle-api-token
<usuario>/ollama-models

cloudflared-token

Contiene:

cloudflared-token.txt
tunnel-hostname.txt

kaggle-api-token

Contiene:

kaggle-api-token.txt

ollama-models

Se crea automáticamente la primera vez que server.py descarga un modelo.

Normalmente contiene:

blobs.tar
manifests.tar

Una vez creado, debe añadirse a dataset_sources en kernel-metadata.json.

Arranque

./start.sh -H 3

Modelo explícito:

./start.sh \
  -H 3 \
  -m qwen3.8:27b-q4_K_M

-H se registra actualmente como duración solicitada, pero no cancela automáticamente el Kernel.

Estado

./status.sh

Muestra:

Kernel
Endpoint
Kaggle quota
Sesion local

La cuota real se obtiene mediante:

kaggle quota

usage.json se utiliza únicamente como histórico local.

Detener

./stop.sh

Actualmente la cancelación del Kernel se realiza manualmente desde la UI de Kaggle mediante:

Cancel Run

Después se vuelve al terminal y se pulsa Enter.

Persistencia de modelos

La persistencia se realiza completamente dentro de Kaggle.

Primera ejecución:

Kaggle runtime
   |
   v
ollama pull
   |
   v
/kaggle/working/ollama/models
   |
   v
kaggle datasets create
   |
   v
<usuario>/ollama-models

Ejecuciones posteriores:

ollama-models
   |
   v
blobs.tar + manifests.tar
   |
   v
/kaggle/working/ollama/models
   |
   v
Ollama

Los modelos no pasan por la máquina local.

Añadir otro modelo

./start.sh -m NUEVO_MODELO

Si el modelo no existe en el Dataset persistente:

restore existing models
        |
        v
ollama pull NUEVO_MODELO
        |
        v
kaggle datasets version

El Dataset ollama-models se actualiza automáticamente.

Cloudflare

El backend se publica mediante:

Cloudflare Named Tunnel

Origin:

http://localhost:11434

HTTP Host Header:

localhost:11434

El endpoint está protegido mediante Cloudflare Access con una policy:

Service Auth

Los clientes deben enviar:

CF-Access-Client-Id
CF-Access-Client-Secret

Backend Ready

No considerar el backend disponible hasta ver en los logs:

BACKEND READY

Ollama:      ONLINE
Model:       ...
Tunnel:      CONNECTED
Persistence: AVAILABLE
Endpoint:    https://...

Documentación

Para instalación completa, configuración de Kaggle, Cloudflare, troubleshooting y runbook para otra máquina:

KAGGLE_OLLAMA_ARCHITECTURE_RUNBOOK_v2.md