- Python 64.5%
- Shell 35.5%
| kaggle | ||
| .env.example | ||
| .gitignore | ||
| architecture.png | ||
| flow.png | ||
| kaggle-ollama.zip | ||
| KAGGLE_OLLAMA_ARCHITECTURE_RUNBOOK_v2.md | ||
| README.md | ||
| start.sh | ||
| status.sh | ||
| stop.sh | ||
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