djev-run README

The project's README from github.com/taeold/djev-run. As one markdown file: README.md.

djev-run

Open In Colab

Serve DiffusionGemma-Jev (djev) on a TypeSafe AI compatible API on Cloud Run with an NVIDIA RTX PRO 6000 Blackwell or NVIDIA L4 GPU, or run directly inside Google Colab Pro (A100 40GB/80GB or L4 24GB) via colab.ipynb, built on mmastrac/djev.

Built-in demo apps:

djev snake djev tetris

Deploy on Google Cloud Run

Follows Cloud Run GPU best practices.

Step 1: Upload Model to GCS

export BUCKET="your-gcs-bucket"
export REGION="us-central1" # Supported RTX PRO 6000 regions: us-central1, europe-west4, asia-southeast1, asia-south2

gcloud storage buckets create "gs://${BUCKET}" --location="${REGION}"
hf download nvidia/diffusiongemma-26B-A4B-it-NVFP4 --local-dir /tmp/dgemma
gcloud storage cp -r /tmp/dgemma/* "gs://${BUCKET}/dgemma/"

Step 2: Deploy to Cloud Run

gcloud beta run deploy djev-dgemma \
  --region="${REGION}" \
  --image=ghcr.io/taeold/djev-run:latest \
  --gpu=1 \
  --gpu-type=nvidia-rtx-pro-6000 \
  --no-gpu-zonal-redundancy \
  --cpu=20 \
  --memory=80Gi \
  --no-cpu-throttling \
  --concurrency=32 \
  --min-instances=0 \
  --max-instances=1 \
  --port=8080 \
  --network=default \
  --subnet=default \
  --vpc-egress=all-traffic \
  --add-volume=name=weights,type=cloud-storage,bucket="${BUCKET}",readonly=false,mount-options=enable-buffered-read=true \
  --add-volume-mount=volume=weights,mount-path=/mnt/gcs \
  --startup-probe=httpGet.path=/health,httpGet.port=8080,initialDelaySeconds=5,periodSeconds=2,timeoutSeconds=2,failureThreshold=120 \
  --set-env-vars="MODEL=/mnt/gcs/dgemma,CANVAS=128,MAX_SEQS=32,MAX_MODEL_LEN=4096,GPU_UTIL=0.40,KV_CACHE_GB=2,ATTN=TRITON_ATTN,TEST_PAGE=1,COPY_TO_SHM=1,ENFORCE_EAGER=1,DISABLE_MM=1,TORCH_COMPILE_DISABLE=1,VLLM_WORKER_MULTIPROC_METHOD=fork,VLLM_UF_EAGER_ALL=1,VLLM_FLASHINFER_MOE_BACKEND=masked_gemm,CUDA_MODULE_LOADING=LAZY"

# --image=ghcr.io/taeold/djev-run:latest: prebuilt from github.com/mmastrac/djev (upstream does not publish a registry image)
# --no-gpu-zonal-redundancy: required for standard regional RTX PRO 6000 quota
# --no-cpu-throttling: keeps all 20 vCPUs active during weight loading and vLLM scheduling
# --network=default --subnet=default --vpc-egress=all-traffic: streams weights from GCS over Google internal networking (~1.05 GiB/s)
# mount-options=enable-buffered-read=true: prefetches 18 GB safetensors shards sequentially from GCS
# TEST_PAGE=1: enables the built-in /snake, /dino, /tetris, and /playground web UIs
# COPY_TO_SHM=1: stages the 17.5 GB model into /dev/shm RAM in the background while Python imports torch/vllm
# VLLM_WORKER_MULTIPROC_METHOD=fork: forks EngineCore from APIServer without re-importing Python
# ENFORCE_EAGER=1 & TORCH_COMPILE_DISABLE=1: skips torch.compile, CUDA graph capture, and redundant startup profiling
# DISABLE_MM=1: skips SigLIP vision/video encoder profiling for text-only evaluation

Step 3: Open the Built-in Demos

All four demos are standalone HTML files with zero external dependencies that call POST /v1/systemone directly from the browser via fetch():


Use with Vercel AI SDK (Optional)

Because djev-run implements the /v1/systemone endpoint contract, you can also point @ai-sdk/typesafe-ai at your Cloud Run URL from Node.js or TypeScript (index.ts):

import { createTypeSafeAi } from '@ai-sdk/typesafe-ai';
import { experimental_evaluate, type Experimental_EvaluationModel } from 'ai';

const typeSafeAi = createTypeSafeAi({
  baseURL: 'https://<your-cloud-run-url>/v1',
});

async function triage(model: Experimental_EvaluationModel, message: string) {
  return experimental_evaluate({
    model,
    state: { message },
    questions: {
      department: {
        type: 'choice',
        instructions: 'Which team should handle this?',
        criteria: {
          billing: 'Payments and refunds',
          support: 'Other requests',
        },
      },
      severity: {
        type: 'score',
        instructions: 'How severe is the issue?',
        criteria: ['Cosmetic', 'Workaround exists', 'Blocking; no workaround'],
      },
      requestsRefund: {
        type: 'boolean',
        instructions: 'Is the customer requesting money back?',
      },
    },
  });
}

const result = await triage(
  typeSafeAi.evaluationModel('jev-latest'),
  'I was charged twice and my account is locked',
);
console.log(result);
// {
//   department: {
//     type: 'choice',
//     choice: 'billing',
//     probabilities: { billing: 0.9988, support: 0.0012 }
//   },
//   severity: {
//     type: 'score',
//     score: 1.9995,
//     probabilities: { '0': 0.0002, '1': 0.0001, '2': 0.9997 }
//   },
//   requestsRefund: {
//     type: 'boolean',
//     probability: 0.9928
//   }
// }
npm install
CLOUD_RUN_URL="https://<your-cloud-run-url>" TYPESAFE_AI_API_KEY="$(gcloud auth print-identity-token)" npm start

Performance

JevBench v1.3.0 (N = 231 public suite):

Configuration Overall Accuracy Composite Score Median Response Time
djev-run (steps=1, samples=1) 81.4% 73.4 117 ms
djev-run (steps=1, samples="auto") 81.8% 73.5 121 ms
api.djev.dev 81.8% 73.0 237 ms

To reach a 47.5-second cold start on Cloud Run, the container streams the 17.5 GB safetensors weights from GCS into /dev/shm RAM in the background (1.05 GiB/s) while Python imports torch and vllm, forks EngineCore from APIServer (VLLM_WORKER_MULTIPROC_METHOD=fork) so modules are not imported twice, disables unused SigLIP vision profiling (DISABLE_MM=1), and skips torch.compile, CUDA graph capture, and redundant memory-profiling passes (ENFORCE_EAGER=1, TORCH_COMPILE_DISABLE=1, --kv-cache-memory).

Empirical benchmarks on Cloud Run with the RTX PRO 6000 confirmed:


Pricing

1 NVIDIA RTX PRO 6000 GPU (20 vCPU, 80 GiB RAM) costs $3.19 per hour while active and scales to $0 when idle with --min-instances=0.

djev-run (taeold/djev-run)

Searching Database…

这是什么?djev-run 通过 TypeSafe AI 兼容的 API,在 Google Cloud Run 上以 NVIDIA RTX PRO 6000 Blackwell 或 L4 GPU 提供 DiffusionGemma-Jev(djev)服务,也可以通过 colab.ipynb 直接在 Google Colab Pro 中运行;它基于 mmastrac/djev 构建。
这是需要注册使用的托管服务,还是我自己部署的东西?需要你自己部署:部署到你自己配备 NVIDIA GPU 的 Google Cloud Run 项目,或者在 Colab Pro 里运行 colab.ipynb。部署流程遵循 Cloud Run GPU 最佳实践。
我怎么把它跑起来?在 Cloud Run 上:先把模型上传到 GCS,再部署到 Cloud Run,然后打开内置的演示。也可以在 Google Colab Pro 中用 A100 40GB/80GB 或 L4 24GB 运行 colab.ipynb。
运行它需要特殊硬件吗?需要,得有 NVIDIA GPU:Cloud Run 上用 RTX PRO 6000 Blackwell 或 L4,Colab Pro 里用 A100 40GB/80GB 或 L4 24GB。模型以 17.5 GB 的 safetensors 权重提供。
它是怎么做到 47.5 秒冷启动的?容器在导入 torch 和 vllm 的同时,以约 1.05 GiB/s 的速度把 17.5 GB 权重从 GCS 流式读入 /dev/shm 内存;从 APIServer fork 出 EngineCore,避免模块被重复导入;并跳过 torch.compile 和 CUDA 图捕获。流式加载比把权重打包进镜像(需 80-115 秒)更快。
Vision 演示展示了什么?一步完成的 6x6 空间语义分割——全部 36 个格子大约 73 毫秒完成——外加一个基于 gemma4vision、使用 280 个 soft token 的 16 传感器 System-1 视觉雷达。
为什么不直接用 api.djev.dev,而要部署自己的实例?两者准确率几乎一样(在 JevBench v1.3.0 上分别为 81.4% 和 81.8%,综合分 73.4 对 73.0),但自部署的 Cloud Run 实例响应速度大约快一倍:端到端中位延迟 117 毫秒对 237 毫秒。
Creator
taeold
Size
1.8 MB
Stars
584
Updated
CommitOct 14
Age
28d
Commits · 90 Days