关于 qzcli
qzcli 是用于管理启智平台 GPU 计算任务的命令行技能,采用类似 kubectl 和 docker 的操作方式。它支持资源发现、交互式或脚本化提交、批量提交和任务管理。
主要功能
- 01发现工作空间和计算资源
- 02查看可用计算节点
- 03交互式或命令行提交任务
- 04从配置文件批量提交任务
- 05列出并停止任务
- 06JSON 输出与试运行预览
适用场景
- 01训练前检查 GPU 可用情况
- 02向启智平台提交训练任务
- 03按配置启动多个任务
- 04管理不同工作空间中的运行任务
MCP 相关
可选的 `qzcli-mcp` 集成可将 qzcli 作为 MCP 工具供 Claude Code 或 Codex 使用。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ wanshuiyin/ auto-claude-code-research-in-sleep --skill qzcli安装后在 Claude Code 中输入/qzcli确认已加载。
详细介绍
qzcli — 启智平台任务管理
用于管理启智(Qizhi)平台 GPU 计算任务的 kubectl/docker 风格 CLI。
GitHub: tianyilt/qzcli_tool
环境约定
启智采用 ../shared-references/compute-env-contract.md 中调度器集群的模式:
镜像在平台外构建,并在提交时指定,因此声明式
环境规范和 env:<name>@<specHash> 台账(.aris/compute/qizhi.md)用于记录
“哪个镜像包含哪些软件栈”。在信任镜像执行长时间任务之前,请在已提交的
任务中运行内核验证,而不是在登录端运行。
安装
pip install rich requests prompt_toolkit mcp
git clone https://github.com/tianyilt/qzcli_tool
cd qzcli_tool && pip install -e .
MCP 集成(可选)
要直接从 Claude Code 或 Codex 将 qzcli 用作 MCP 工具:
# Claude Code
claude mcp add qzcli -- qzcli-mcp
# Codex
codex mcp add qzcli -- qzcli-mcp
配置
凭据按以下优先级读取:
CLI args > --password-stdin > env vars > QZCLI_ENV_FILE (.env) > ~/.qzcli/config.json > interactive input
# Option A: env file (recommended)
mkdir -p ~/.qzcli
cat > ~/.qzcli/.env <<'EOF'
QZCLI_USERNAME="your_username"
QZCLI_PASSWORD="your_password"
EOF
# Option B: environment variables
export QZCLI_USERNAME="your_username"
export QZCLI_PASSWORD="your_password"
export QZCLI_API_URL="https://qz.yourorg.edu.cn"
配置文件存储在 ~/.qzcli/ 中:config.json、.cookie、resources.json、jobs.json。
快速开始
# 1. Login
qzcli login
# 2. Discover and cache workspaces/compute groups (run once, re-run after joining new workspaces)
qzcli res -u
# 3. Check available nodes
qzcli avail
# 4. List running jobs
qzcli ls -c -r
身份验证
# Interactive login
qzcli login
# With credentials
qzcli login -u YOUR_USERNAME -p 'YOUR_PASSWORD'
# Read password from stdin (for scripts)
echo 'YOUR_PASSWORD' | qzcli login -u YOUR_USERNAME --password-stdin
# Check current cookie
qzcli cookie --show
# Clear cookie
qzcli cookie --clear
注意: 如果 Cookie 过期且已配置凭据,qzcli avail 会自动刷新 Cookie。
资源发现
# List cached workspaces
qzcli res --list
# Refresh all workspace resource cache (run this first!)
qzcli res -u
# Refresh a specific workspace
qzcli res -w MY_WORKSPACE -u
# Set a human-readable alias for a workspace
qzcli res -w ws-xxxxxxxx --name "My Workspace"
检查可用节点
# All workspaces
qzcli avail
# Including low-priority task nodes (slower but more accurate)
qzcli avail --lp
# Specific workspace
qzcli avail -w MY_WORKSPACE
# Find compute groups with N free nodes
qzcli avail -n 4
# Export IDs for scripting
qzcli avail -n 4 -e
# Show idle node names
qzcli avail -w MY_WORKSPACE -v
提交任务
交互式(首次使用推荐)
# Full interactive selection: workspace → project → compute group → spec
qzcli create -i
# Interactive for a specific workspace only
qzcli create -i -w "My Workspace"
TUI 会在每个层级显示 GPU 类型、可用性和规格状态。按 Enter/→ 深入,按 ← 返回。
非交互式
# Using names (resolved from qzcli res cache)
qzcli create \
--name "my-training-job" \
--command "bash /path/to/train.sh" \
--workspace "My Workspace" \
--compute-group "My Compute Group" \
--image YOUR_REGISTRY/team/image:tag \
--instances 4 \
--priority 10
# Using IDs directly
qzcli create \
--name "my-job" \
--command "bash /path/to/train.sh" \
--workspace ws-YOUR_WORKSPACE_ID \
--compute-group lcg-YOUR_LCG_ID \
--spec YOUR_SPEC_ID \
--image YOUR_REGISTRY/team/image:tag \
--instances 4
关键参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--name / -n | 必填 | 任务名称 |
--command / -c | 必填 | 要运行的命令 |
--workspace / -w | 工作空间名称或 ID(ws-...) | |
--compute-group / -g | 自动 | 计算组名称或 ID(lcg-...) |
--spec / -s | 自动 | 资源规格 ID |
--image / -m | Docker 镜像 | |
--instances | 1 | 实例数量 |
--shm | 1200 | 共享内存(GiB) |
--priority | 10 | 优先级(1–10) |
--dry-run | 仅预览,不提交 | |
--json | 输出 JSON,供脚本使用 |
# Preview before submitting
qzcli create --name test --command "echo hi" --workspace "My Workspace" \
--image YOUR_IMAGE --dry-run
环境变量透传(用于现有提交脚本)
# Pass vars directly — do NOT use "export VAR; bash script.sh"
WORKSPACE_ID="ws-YOUR_WORKSPACE_ID" \
LCG_ID="lcg-YOUR_LCG_ID" \
SPEC_ID="YOUR_SPEC_ID" \
CHECKPOINT_DIR="/path/to/checkpoint" \
bash YOUR_SUBMIT_SCRIPT.sh
HPC / CPU 任务(Slurm)
qzcli hpc \
--name "my-cpu-job" \
--workspace ws-YOUR_WORKSPACE_ID \
--compute-group lcg-YOUR_LCG_ID \
--predef-quota-id YOUR_QUOTA_ID \
--cpu 55 --mem-gi 300 --instances 30 \
--image YOUR_REGISTRY/team/cpu-image:tag \
--entrypoint "cd /path/to/dir && bash run.sh"
批量提交
# Submit from config file
qzcli batch batch_config.json --delay 3
# Preview all jobs
qzcli batch batch_config.json --dry-run
# Continue on error
qzcli batch batch_config.json --continue-on-error
配置格式(batch_config.json):
{
"defaults": {
"workspace": "ws-YOUR_WORKSPACE_ID",
"compute_group": "lcg-YOUR_LCG_ID",
"spec": "YOUR_SPEC_ID",
"image": "YOUR_REGISTRY/team/image:tag",
"instances": 4,
"priority": 10
},
"matrix": {
"checkpoint": ["/path/to/ckpt1", "/path/to/ckpt2"],
"step": [50000, 100000]
},
"name_template": "eval-{checkpoint_basename}-step{step}",
"command_template": "bash eval.sh --checkpoint {checkpoint} --step {step}"
}
矩阵键会进行笛卡尔积组合(上例中 2×2 = 4 个任务)。路径的基本名称可使用 {key_basename}。
Shell 循环(替代方式)
for step in 040000 050000 060000; do
qzcli create \
--name "eval-step${step}" \
--command "bash eval.sh --step $step" \
--workspace "My Workspace" \
--compute-group "My Compute Group" \
--instances 4
sleep 3
done
任务管理
# List jobs
qzcli ls -c -w MY_WORKSPACE # specific workspace
qzcli ls -c --all-ws # all workspaces
qzcli ls -c -w MY_WORKSPACE -r # running only
qzcli ls -c -w MY_WORKSPACE -n 50 # show 50
# Stop a job
qzcli stop JOB_ID
# Job status / details
qzcli status JOB_ID
# Watch all running jobs (refresh every 10s)
qzcli watch -i 10
# Workspace view with GPU utilization
qzcli ws
qzcli ws -a # all projects
qzcli ws -p "My Project"
故障排查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| Cookie 过期 | 会话中断 | 重新运行 qzcli login |
未找到名称为 'xxx' 的工作空间 | 缓存过期 | 运行 qzcli res -u |
create -i 中没有资源 | 缓存为空 | 运行 qzcli login && qzcli res -u |
找不到 qzcli-mcp | 尚未安装 | cd qzcli_tool && pip install -e . |
| 工作空间中没有规格 | ID 不匹配 | 将规格 ID 与正确的工作空间匹配 |
| 任务静默失败 | 脚本调用了 sys.exit(0) | 直接检查任务日志 |
| zsh 通配符错误 | 远程 Shell 使用 zsh | 将命令放入 bash -c 中,或使用 Python |