GPUStack部署Qwen3模型
注:模型文件较大,选择下载至空闲较大的磁盘
https://www.modelscope.cn/models
二、部署模型
2.1、将下载的模型文件上传至部署GPUStack挂载的NFS目录中
/data/nfs/gpustack/models

2.2、登录GPUStack
左侧菜单栏:模型->部署->部署模型->本地路径
模型路径选择与2.1卷挂载的宿主机目录对应的容器内目录

2.3、观察模型部署日志,待状态为Running时则模型部署成功


注:若部署失败提示缺失相关依赖包,则执行此命令查看需要哪些依赖
docker run --rm -it --entrypoint "" 192.xxx.xxx.xxx:8090/gpustack/gpustack:v2.0-arm64 gpustack list-images

因此次部署在华为910b设备上,可先选择性下载相关依赖上传至本地仓库方便后续使用。
附下载依赖包及上传至本地仓库脚本(运行脚本需安装好docker且配置本地仓库登录)
sync_gpustack_images_arm64.sh
#!/bin/bash set -eo pipefail # ====================== 配置区(根据实际环境修改)====================== # 源镜像前缀 SOURCE_REGISTRY="docker.io/" # 目标私有仓库地址 TARGET_REGISTRY="192.xxx.xxx.xxx:8090" # 固定指定架构:linux/arm64 TARGET_PLATFORM="linux/arm64" # 完整镜像列表 IMAGE_LIST=( "gpustack/runner:cann8.3-910b-mindie2.2.rc1" "gpustack/runner:cann8.3-910b-sglang0.5.6.post2" "gpustack/runner:cann8.3-910b-vllm0.12.0" "gpustack/runner:cann8.2-910b-mindie2.1.rc2" "gpustack/runner:cann8.2-910b-mindie2.1.rc1" "gpustack/runner:cann8.2-910b-sglang0.5.2" "gpustack/runner:cann8.2-910b-sglang0.5.1.post3" "gpustack/runner:cann8.2-910b-vllm0.10.1.1" "gpustack/runner:cann8.2-910b-vllm0.10.0" "gpustack/runner:cann8.2-910b-vllm0.9.2" "gpustack/runner:cann8.2-910b-vllm0.9.1" ) # ====================================================================== # 颜色输出定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 日志打印函数 log_info() { echo -e "${GREEN}[INFO] $*${NC}" } log_warn() { echo -e "${YELLOW}[WARN] $*${NC}" } log_error() { echo -e "${RED}[ERROR] $*${NC}" } # 前置检查:仅校验Docker服务可用性 check_docker() { log_info "检查Docker服务状态..." if ! command -v docker &> /dev/null; then log_error "未找到docker命令,请先安装Docker" exit 1 fi if ! docker info &> /dev/null; then log_error "Docker服务未运行或无权限访问,请检查" exit 1 fi # 校验私有仓库信任配置 if ! docker info | grep -q "${TARGET_REGISTRY}"; then log_warn "目标仓库 ${TARGET_REGISTRY} 未配置为insecure-registries,可能导致推送失败" fi } # 主执行逻辑 main() { log_info "==================== 批量同步 ${TARGET_PLATFORM} 镜像 ====================" log_info "源仓库:${SOURCE_REGISTRY}" log_info "目标私有仓库:${TARGET_REGISTRY}" log_info "总镜像数量:${#IMAGE_LIST[@]}" # 统计数据 success=0 failed=0 # 遍历处理所有镜像 for image in "${IMAGE_LIST[@]}"; do log_info "============================================================" log_info "开始处理镜像:${image}" # 拼接完整源镜像地址 src_image="${SOURCE_REGISTRY}${image}" # 拼接目标镜像地址 dest_image="${TARGET_REGISTRY}/${image}" # 强制指定平台拉取镜像,拉取失败则标记失败并继续执行下一个 log_info "拉取镜像:${src_image} 平台:${TARGET_PLATFORM}" if docker pull --platform "${TARGET_PLATFORM}" "${src_image}"; then log_info "拉取成功" # 打标签 docker tag "${src_image}" "${dest_image}" log_info "已打标签:${dest_image}" # 推送至私有仓库 log_info "推送镜像至私有仓库:${dest_image}" if docker push "${dest_image}"; then log_info "推送成功" ((success++)) else log_error "推送失败:${dest_image}" ((failed++)) fi else log_error "拉取失败:${src_image}" ((failed++)) fi done # 输出最终统计结果 log_info "==================== 任务执行完成 ====================" log_info "成功处理镜像数:${success}" log_info "失败处理镜像数:${failed}" } # 执行检查与主逻辑 check_docker main

浙公网安备 33010602011771号