本项目的目标是构建一个开箱即用的 SgLang 环境,并且支持多种后端模型,包括: - gemma3 - qwen2.5-vl - qwen3 - qwen3-coder
CNB 环境中如何平衡以下问题呢? - 仓库大小 - 云原生开发环境启动时间 - Docker 产物大小 - SGLang 启动时间/模型加载时间
我们应该构建一个单纯的 Runtime 环境,分离模型和运行时配置,确保仓库大小不会太大
云原生开发的原理本质上就是: 1. 分配容器 2. 构建/拉取镜像 3. 拉取仓库 4. 启动容器
其中,步骤 2 和 步骤 3 都有缓存,主要的时间开销来自于冷启动。但是也有优化的技巧,例如: - 避免使用 vscode.docker.build 命令启动容器,这样的容器仅会缓存一周,且无法命中他人的缓存;使用构建好的上传镜像可以避免这个问题。 - 仓库大小不宜过大,如果将多个模型权重同时包含在仓库中, 即使我们只需要一个模型,也需要下载整个仓库。
因此,本仓库使用预先构建的镜像 docker.cnb.cool/maikebuke/runtime/gpu:latest 作为运行环境;
同时,代码仓库中不包含任何模型文件,而是每次启动都从 ai-models 中拉取。
经过测试,首次命中缓存的速度大概是 500 mb/s; 而拉取模型的速度也大致是 420 mb/s。在仅使用部分模型的情况下,速度优势很明显。
使用预先构建的 Docker 镜像,完全不占用自己组织的对象存储容量;
手动下载,大概 420 mb/s 。 传统的 git 下载的 Checkout 速度很慢,使用 aria2 手动下载 git-lfs 文件加速。
大概 3 分钟可以准备好一个模型
# 1. 安装 SGLang 的环境 (会自动运行)
./scripts/sglang.sh install
# 2. 下载模型 (手动下载一个)
# gemma3 qwen2.5-vl qwen3 qwen3-coder
./scripts/download-model.sh gemma3
# 3. 启动模型 API 服务器
./scripts/sglang.sh qwen2.5-vl