mcpField
Q
qzcli

qzcli

github.com/wanshuiyin云与 DevOps18.2k437 次安装4 天前更新
代码仓库

关于 qzcli

qzcli 是用于管理启智平台 GPU 计算任务的命令行技能,采用类似 kubectl 和 docker 的操作方式。它支持资源发现、交互式或脚本化提交、批量提交和任务管理。

主要功能

  1. 01发现工作空间和计算资源
  2. 02查看可用计算节点
  3. 03交互式或命令行提交任务
  4. 04从配置文件批量提交任务
  5. 05列出并停止任务
  6. 06JSON 输出与试运行预览

适用场景

  1. 01训练前检查 GPU 可用情况
  2. 02向启智平台提交训练任务
  3. 03按配置启动多个任务
  4. 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 / -mDocker 镜像
--instances1实例数量
--shm1200共享内存(GiB)
--priority10优先级(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

评论

支持 Markdown