GPUStack部署Qwen3模型

一、模型下载链接

注:模型文件较大,选择下载至空闲较大的磁盘

https://www.modelscope.cn/models

二、部署模型

2.1、将下载的模型文件上传至部署GPUStack挂载的NFS目录中

/data/nfs/gpustack/models

image

2.2、登录GPUStack

左侧菜单栏:模型->部署->部署模型->本地路径

模型路径选择与2.1卷挂载的宿主机目录对应的容器内目录

image

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

image

image

 注:若部署失败提示缺失相关依赖包,则执行此命令查看需要哪些依赖

docker run --rm -it --entrypoint "" 192.xxx.xxx.xxx:8090/gpustack/gpustack:v2.0-arm64  gpustack list-images

image

因此次部署在华为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

 

posted @ 2026-03-04 12:00  sxFu9528  阅读(0)  评论(0)    收藏  举报