欢迎光临
我们一直在努力

超详细喂饭版!linux/openeuler部署Qwen3-32B等大模型华为昇腾Arm架构服务器anaconda+modelscope+mindie+docker等+openwebui可视化前端界面

1. 基础环境配置

1.1 anaconda安装

系统:openeuler22.03(CentOs)

架构:arrch64

anaconda对应安装资源包下载地址:

Index of /archivehttps://repo.anaconda.com/archive/

下载好后cd到安装包路径,使用安装指令如下:

bash Anaconda3-2025.06-1-Linux-aarch64.sh

按照提示接受协议,并选择安装目录。安装完成后,更新环境变量

source ~/.bashrc

1.2 anconda中创建虚拟环境

这部分同windows下的anconda env设置相同。

对于Qwen3模型的下载,配置modelscope环境,代码如下:

#创建新环境,环境名为modelscope
conda create -n modelscope python=3.9#这里必须使用python3.9及以上版本,否则在后续下载编译modelscope或者qwen3模型时,会提示no moudle named zoneinfo,因为只有3.9以上的该模型才被假如系统模型库
#激活环境
conda activate modelscope

安装modelscope

pip install modelscope -i https://mirrors.aliyun.com/pypi/simple/ #使用阿里镜像源,下载更快

2. 下载模型库和模型权重

2.1 下载模型权重

如需下载完整模型库:
modelscope download –model Qwen/Qwen3-32B

(只需要下载部分文件:modelscope download –model Qwen/Qwen3-32B README.md –local_dir ./dir #例如下载readme到本地dir文件夹)

*这种方法会把权重默认下载在路径~/.cache/modelscope/下,但是很有可能占用系统盘,影响系统使用,因此把权重下载到指定硬盘,步骤如下。

(1)搜索系统所有硬盘

lsblk -o NAME,SIZE,MOUNTPOINT

输出如下,分别代表了硬盘名字,内存和地址:

NAME SIZE MOUNTPOINT
sda 200G
├─sda1 50G /
├─sda2 150G /data
sdb 500G /mnt/disk1
sdc 1T /mnt/disk2

(2)把模型权重下载到指定的sdc盘中的models文件夹中(自己新建一个文件夹命名models,需要定位到指定文件夹路径,不要直接下到盘的路径,否则可能还是无法下载到指定盘中!),–local_dir后接本地需要下载到的文件夹路径位置;或者直接cd到需要下载位置的路径下在进行下载也可以!

modelscope download –model Qwen/Qwen3-32B –local_dir /mnt/disk2/models

下载完成后,模型权重会放在/mnt/disk2/models/Qwen/Qwen3-32B/路径下

*删除之前默认下载地址的模型权重,以防占用系统内存:

全盘搜索Qwen3-32B的储存路径:

# 搜索包含 Qwen3-32B 的目录
sudo find / -type d -name "Qwen3-32B" 2>/dev/null

会输出包含该模型名字的目录路径,假如为/root/dir

删除该路径的模型权重

# 确认路径后再删除
rm -rf /root/dir

2.2 下载华为适配的加速推理引擎MindIE

下载模型适配的推理引擎MindIE,在terminal中输入以下命令行(魔乐社区镜像下载),即开始下载适配本模型Qwen3-32B的镜像包mindie:2.0.T17.B010-800I-A2-py3.11-openeuler24.03-lts-aarch64.tar.gz(也可以进入华为社区下载,MindIE 系列 昇腾计算 2.0.T17 软件补丁下载)

wget https://modelers.cn/coderepo/web/v1/file/xieyuxiang/mindie_2.0.RC1_image/main/media/2.0.RC1-800I-A2-py311-openeuler24.03-lts.tar.gz

*!!注意:后续部署大模型时发现上述版本的mindie太老了!!服务挂不起来!!会一直报如下问题!!二更:一般提示如下问题且不报其他错误,log日志中也不提示其他问题报错记录的话,一般都是mindle镜像的原因!!报错后重新在docker中pull下镜像地址即可!

LLMInferEngine failed to init LLMInferModels

Killed

因此需要下载新版本的mindie安装包后,后续即可正常使用!!

mindie镜像下载最新地址:

https://www.hiascend.com/developer/ascendhub/detail/af85b724a7e5469ebd7ea13c3439d48f 

选择所需镜像,点击“立即下载”(1.0.0及以后版本支持DeepSeekR1蒸馏模型):

立即下载后,会弹出:

我们使用的华为服务器是基于arm架构,因此用以下命令下载即可

docker pull –platform=arm64 swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.1.RC2-800I-A2-py311-openeuler24.03-lts

3. docker镜像加载

3.1 配置docker环境

环境:华为arm架构服务器

版本:openeuler22.03

先禁用/移除导致失败的第三方 repo(之前添加过 docker-ce 的镜像仓库),避免影响其他相关下载和更新,如果之前没有配置好DNS直接用repo不禁用的话,后续重新配置docker也可能会有各种报错!!因此优先推荐先禁用!

# 禁用 docker-ce 的 repo(通常是 docker-ce-stable)
sudo dnf config-manager –set-disabled docker-ce-stable || true

# 或者直接删除 repo 文件(如果你知道文件在哪里,例如 /etc/yum.repos.d/docker-ce.repo)
sudo rm -f /etc/yum.repos.d/docker-ce* || true

(1) 更新下相关的dnf 下载包

sudo dnf update -y # 更新系统的软件包
*搜索是否dnf中有所需要的安装包/命令
dnf search yum-utils #yum-utils是包的名字,可替换为其他

(2)确认目前系统版本

cat /etc/openEuler-release

若输出类似openEuler release 22.03 LTS的信息,则符合安装条件。

(3)卸载旧版本docker,避免版本冲突

yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

(4)配置DNS,保证网络和下载

编辑DNS配置文件:

vi /etc/resolv.conf

按i进入编辑模式,添加以下DNS服务器地址:

nameserver 114.114.114.114 # 国内通用DNS
nameserver 8.8.8.8 # 谷歌公共DNS

    按Esc退出编辑,输入:wq保存并退出

    测试网络连接:

    ping www.baidu.com # 出现回显信息说明网络正常

    *注意:/etc/resolv.conf可能被 NetworkManager 自动覆盖,若后续网络异常,可通过网卡配置文件永久设置 DNS,步骤如下:

    *编辑网卡文件(如/etc/sysconfig/network-scripts/ifcfg-eth0),添加:

    DNS1=114.114.114.114
    DNS2=8.8.8.8

    保存后重启网络:systemctl restart network

    (5)配置docker仓库repo

    新建并编辑docker仓库repo配置文件

    vi /etc/yum.repos.d/docker-ce.repo

    添加以下内容,这里使用华为云镜像源加速:

    [docker-ce-stable]

    name=Docker CE Stable – $basearch
    baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/$basearch/stable
    enabled=1
    gpgcheck=1
    gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg

    输入:wq保存退出

    (6)安装docker组件

    更新yum缓存

    yum makecache # 生成元数据缓存,加快后续安装速度

    安装docker核心组件

    yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

    ❗ 常见问题:若安装时提示container-selinux依赖缺失,先执行以下命令安装依赖:

    yum install -y container-selinux

    (7)启动docker并验证状态

     系统中设置开机自启:

    systemctl enable docker # 避免系统重启后Docker需要手动启动

    系统中启动 Docker

    systemctl start docker

    验证安装版本:

    docker –version # 输出类似Docker version 24.0.7, build xxx的信息即正常

    查看运行状态:

    systemctl status docker # 显示active (running)说明服务正常运行

    *注意:systemctl设置好docker之后千万千万不要再随意动systemctl命令了!!比如systemctl stop docker之类的!!强制stop后可能引发系统问题无法直接通过systemctl restart docker!!设置好之后就基本不要再用systemctl指令操作docker了!血的教训!!

    错误描述:

    本来想停正在运行qwen3的docker的,手贱错误输入了systemctl stop docker,然后悲剧来了,无论是sudo systemctl restart docker/sudo systemctl start docker都不可以,system status docker一直显示failed。。。

    解决方案:临时清空 Docker 配置文件

    有时 Docker 的配置文件 /etc/docker/daemon.json 中的错误配置会导致启动失败。可以将该配置文件恢复到默认值(空配置),然后尝试重新启动 Docker。命令如下:

    sudo echo '{}' > /etc/docker/daemon.json

    然后重启docker成功:

    sudo systemctl restart docker

    如果配置文件中有语法错误或不兼容的设置,清空配置文件并重启应该能够解决问题。

     (8) docker镜像加速优化

    创建 Docker 配置文件:

    vi /etc/docker/daemon.json

    添加更多镜像源地址:

    {
    "registry-mirrors": [
    "https://hub-mirror.c.163.com", # 网易镜像
    "https://mirror.baidubce.com", # 百度镜像
    "https://ccr.ccs.tencentyun.com", # 腾讯云镜像
    "https://docker.1panelproxy.com",
    "https://5e96702d4787418295070cded678a7b6.mirror.swr.myhuaweicloud.com",
    "https://docker.m.daocloud.io",
    "https://docker.imgdb.de",
    "https://docker.wanpeng.life",
    "https://docker.1panel.live",
    "https://hk11.606166.xyz",
    "https://docker.1ms.run",
    "https://docker.domys.cc",
    "https://docker-0.unsee.tech",
    "https://docker.hlmirror.com",
    "https://cjie.eu.org",
    "https://hub.rat.dev",
    "https://docker.rainbond.cc"
    ]
    }

    重启docker使配置生效:

    systemctl daemon-reload

    systemctl restart docker

    (9)docker相关的启动/查询/删除等

    查看所有已经配置好的docker(包括运行和停止状态):

    docker ps -a #一定要加-a,不加-a则只能输出在运行状态的docker,无法输出已停止状态的

    停止某正在运行的docker:

    docker stop qwen3-32b #qwen3-32b是docker name

    删除某docker:

    #方法一:先停止运行后删除
    docker stop qwen3-32b #先停止该docker
    docker rm qwen3-32b #删除docker

    #方法二:强制删除(无论是否运行)
    docker rm -f qwen3-32b

    stop docker后,如需运行docker,需要重新启动后才可以继续使用docker exec -it contain_name bash进入容器::

    docker start qwen3-32b

    3.2  启动容器

    首先查询docker中的mindie镜像:

    docker images

    输出如下:

    红框中圈出的是新版本的mindie镜像,在下面的docker启动中需要用到。

    启动docker:

    docker run -it -d –shm-size 200g –net=host –name qwen3-32b \\ #–shm-size表示共享内存大小 –name后面填写容器名
    –privileged \\
    –device=/dev/davinci_manager \\ #固定参数,用于访问华为固定设备,达芬奇芯片管理器
    –device=/dev/hisi_hdc \\ #固定参数,用于访问华为固定设备,海思芯片控制器
    –device=/dev/devmm_svm \\ #固定参数,用于访问固定设备,内存管理和虚拟机
    –device=/dev/davinci0 \\ #表示访问调用几个npu芯片,davinci0,davinci1….想调用几个npu芯片就可以设置几个,可以在系统中使用npu-smi info查看系统的npu情况
    –device=/dev/davinci1 \\
    –device=/dev/davinci2 \\
    –device=/dev/davinci3 \\
    –device=/dev/davinci4 \\
    –device=/dev/davinci5 \\
    –device=/dev/davinci6 \\
    –device=/dev/davinci7 \\
    -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \\#固定参数,与 Ascend 相关的驱动文件夹,:前是主机地址,;后是容器中的地址(可自定义)
    -v /usr/local/sbin:/usr/local/sbin \\#固定参数,系统的管理工具和二进制文件。:前是主机地址,;后是容器中的地址(可自定义)
    -v /path/to/model:/path/to/model/in/container \\ #:前是主机中实际下载放置的模型路径,:后是要映射到容器中的路径(自定义),例如 -v /run/media/root/2c929422-a9a8-4a9f-a594-bbe16904232d/Qwen3:/data/Qwen3将主机中的模型映射到docker中的/data/Qwen3路径下
    a4708118cd12 /bin/bash #a4708118cd12:对应mindie版本在docker image中的image id(也可以用TAG,都是同一个定位),最后用/bin/bash进行命令执行

    修改权限:

    chown -R root:root /path-to-weights #path-to-weights替换为主机的模型权重路径;如果是非root账户安装,则将root:root改为1000:1000
    chmod -R 750 /path-to-weights #path-to-weights替换为主机的模型权重路径

    –user:如果您的环境中 HDK 是通过普通用户安装(如默认的 HwHiAiUser),请设置对应的用户组,例如用户组 ID 为 1001,则使用 –user mindieuser:1001;镜像中默认使用的是用户组 1000。 设置容器名称 –name 与镜像名称,例如 800I A2 服务器使用 mindie:2.0.T17.B010-800I-A2-py3.11-openeuler24.03-lts-aarch64。

    3.3 进入容器:

    docker exec -it qwen3-32b bash #qwen3-32b是上一步设置的容器名称

    打开配置文件:

    vim /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json

    按i进入编辑模式,修改下图红框部分内容。

    需要修改的参数意义: ipAddress    “XX.XX.XX.XX”    主机IP port    XXXX    端口号,自定义。不要使用ss -tuln中正在使用监听的端口 httpsEnabled    false    关闭HTTPS通信 npuDeviceIds    [[0,1,2,3…]]    NPU编号,与容器设置保持一致,想要调哪几张npu跑就写入其编号worldSize    4    NPU数量,由npuDeviceIds决定 modelName    “qwen3-32b”    模型名称,自定义。调用模型时即使用此名称 modelWeightPath    “/path/to/model/in/container”    容器内模型映射路径,与docker run设置保持一致

    maxSeqLen    XXXX    输入和输出的最大总长度,需大于等于maxInputTokenLen和maxIterTimes的和 maxInputTokenLen    XXXX    输入部分的最大token数量,必须小于maxSeqLen,如果输入被截断,可能需要增加这个参数的值 maxPrefillBatchSize    XXXX    预填充阶段一个batch中的请求个数上限,范围在[1,maxBatchSize]之间,建议设置为maxBatchSize的一半 maxPrefillTokens    XXXX    预填充阶段一个batch中包含的Input token总数的上限,设置为与maxInputTokenLen相同 maxBatchSize    XXXX    解码阶段的最大batch size,影响并发能力,取值范围[1,5000] maxIterTimes    XXXX    最大迭代次数,即输出的最大token数,必须小于maxSeqLen

     查看ip地址:

    # 查看所有网卡信息
    ip addr show

    #或者,简略版查询
    ip a

    查看port端口占用情况:

    ss -tuln
    #或者
    ss -tulnp

    下面是一个实际例子:

    {
    "Version" : "1.0.0",

    "ServerConfig" :
    {
    "ipAddress" : "172.16.23.55",
    "managementIpAddress" : "127.0.0.2",
    "port" : 1025,
    "managementPort" : 1026,
    "metricsPort" : 1027,
    "allowAllZeroIpListening" : false,
    "maxLinkNum" : 1000,
    "httpsEnabled" : false,
    "fullTextEnabled" : false,
    "tlsCaPath" : "security/ca/",
    "tlsCaFile" : ["ca.pem"],
    "tlsCert" : "security/certs/server.pem",
    "tlsPk" : "security/keys/server.key.pem",
    "tlsPkPwd" : "security/pass/key_pwd.txt",
    "tlsCrlPath" : "security/certs/",
    "tlsCrlFiles" : ["server_crl.pem"],
    "managementTlsCaFile" : ["management_ca.pem"],
    "managementTlsCert" : "security/certs/management/server.pem",
    "managementTlsPk" : "security/keys/management/server.key.pem",
    "managementTlsPkPwd" : "security/pass/management/key_pwd.txt",
    "managementTlsCrlPath" : "security/management/certs/",
    "managementTlsCrlFiles" : ["server_crl.pem"],
    "kmcKsfMaster" : "tools/pmt/master/ksfa",
    "kmcKsfStandby" : "tools/pmt/standby/ksfb",
    "inferMode" : "standard",
    "interCommTLSEnabled" : true,
    "interCommPort" : 1121,
    "interCommTlsCaPath" : "security/grpc/ca/",
    "interCommTlsCaFiles" : ["ca.pem"],
    "interCommTlsCert" : "security/grpc/certs/server.pem",
    "interCommPk" : "security/grpc/keys/server.key.pem",
    "interCommPkPwd" : "security/grpc/pass/key_pwd.txt",
    "interCommTlsCrlPath" : "security/grpc/certs/",
    "interCommTlsCrlFiles" : ["server_crl.pem"],
    "openAiSupport" : "vllm",
    "tokenTimeout" : 600,
    "e2eTimeout" : 600,
    "distDPServerEnabled":false
    },

    "BackendConfig" : {
    "backendName" : "mindieservice_llm_engine",
    "modelInstanceNumber" : 1,
    "npuDeviceIds" : [[0,1,2,3]],
    "tokenizerProcessNumber" : 8,
    "multiNodesInferEnabled" : false,
    "multiNodesInferPort" : 1120,
    "interNodeTLSEnabled" : true,
    "interNodeTlsCaPath" : "security/grpc/ca/",
    "interNodeTlsCaFiles" : ["ca.pem"],
    "interNodeTlsCert" : "security/grpc/certs/server.pem",
    "interNodeTlsPk" : "security/grpc/keys/server.key.pem",
    "interNodeTlsPkPwd" : "security/grpc/pass/mindie_server_key_pwd.txt",
    "interNodeTlsCrlPath" : "security/grpc/certs/",
    "interNodeTlsCrlFiles" : ["server_crl.pem"],
    "interNodeKmcKsfMaster" : "tools/pmt/master/ksfa",
    "interNodeKmcKsfStandby" : "tools/pmt/standby/ksfb",
    "ModelDeployConfig" :
    {
    "maxSeqLen" : 25600,
    "maxInputTokenLen" : 20480,
    "truncation" : false,
    "ModelConfig" : [
    {
    "modelInstanceType" : "Standard",
    "modelName" : "qwen3_32b",
    "modelWeightPath" : "/data/Qwen3",
    "worldSize" : 4,
    "cpuMemSize" : 5,
    "npuMemSize" : -1,
    "backendType" : "atb",
    "trustRemoteCode" : false
    }
    ]
    },

    "ScheduleConfig" :
    {
    "templateType" : "Standard",
    "templateName" : "Standard_LLM",
    "cacheBlockSize" : 128,

    "maxPrefillBatchSize" : 50,
    "maxPrefillTokens" : 25600,
    "prefillTimeMsPerReq" : 150,
    "prefillPolicyType" : 0,

    "decodeTimeMsPerReq" : 50,
    "decodePolicyType" : 0,

    "maxBatchSize" : 200,
    "maxIterTimes" : 10240,
    "maxPreemptCount" : 0,
    "supportSelectBatch" : false,
    "maxQueueDelayMicroseconds" : 5000
    }
    }
    }

    3.4 检查资源可用性(可省略)

    这部分内容参考网址,主要防止一些报错:

    ascend-docker-image: 提供Ascend相关的Dockerfile示例,展示如何创建docker镜像。 – Gitee.com

    (1) 检查HDK

    (2) 检查torch

    (3) 检查mindle组件

    3.5 服务化推理-模型测试

    拉起服务化,启动模型

    cd /usr/local/Ascend/mindie/latest/mindie-service/bin
    ./mindieservice_daemon

    新建测试窗口(OpenAI接口)

    curl -X POST 172.16.23.55:1060/v1/chat/completions \\#POST后接172.16.23.55是ip address,1060是json中设置的port端口号,后面v1…等是相关模型服务
    -d '{
    "messages": [
    {"role": "system", "content": "you are a helpful assistant."},
    {"role": "user", "content": "帮我写一个上海富婆爱上我的故事"}
    ],
    "max_tokens": 256,
    "stream": false,
    "do_sample": true,
    "temperature": 0.6,
    "top_p": 0.95,
    "top_k": 20,
    "model": "qwen3-32b"
    }'# -d后'{}'输入测试内容即可,其他的都是模型可调参数

    输出如下,即部署成功:

    3.5 可视化交互前端界面

    (1)使用Dify工具包

    简介:Dify 是一款开源的大语言模型(LLM)应用开发平台,通过 ‌低代码/无代码‌ 的模块化设计降低生成式 AI 应用的开发门槛,支持集成 OpenAI、Claude3 等主流模型及自托管模型(如 Ollama)‌。其核心功能包括 ‌后端即服务(BaaS)‌、‌可视化 Prompt 编排‌ 和 ‌LLMOps 工具链‌,可灵活构建智能客服、文本生成等场景‌。平台内置 ‌RAG 引擎‌ 实现知识库检索增强生成,并通过 ‌Agent 框架‌ 支持复杂任务分解与工具调用(如搜索、绘图),结合 ‌Workflow 工作流‌ 实现多步骤业务逻辑自动化‌。

     (2) Dify安装

    版本要求

    系统查询命令:

    cpu信息查询:

    #查询cpu核心数及其他信息:
    lscpu
    #或者可以快速查看cpu核心数量:
    nproc

    输出cpu核心数量大于2即可

    ram信息查询:

    #检查内存大小(RAM)
    free -h

    RAM输出

    total used free shared buff/cache available
    Mem: 7.7Gi 1.6Gi 3.3Gi 160Mi 2.8Gi 5.3Gi
    Swap: 2.0Gi 0B 2.0Gi

    在 Mem 行,查看 total 字段的值。确保总内存大于或等于 4 GiB

    拉取Dify镜像:

    git clone https://github.com/langgenius/dify.git –branch 0.15.3

    修改配置:

    #进入docker目录
    cd dify/docker
    #复制环境配置文件
    cp .env.example .env
    #vim打开.env文件更改端口号
    vim .env

    将NGINX_PORT与NGINX_PORT_EXPOSE更改为未使用的端口(可自定义)。

    默认使用80端口,若无冲突则无需更改。

    如果不配置docker镜像源,会报错如下:

    Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

    docker镜像配置(国内一般很难直接从docker官方源拉取镜像,因此要配置镜像源如下):

    [root@localhost ~]# vim /etc/docker/daemon.json
    [root@localhost ~]# more /etc/docker/daemon.json
    {
    "default-runtime": "ascend",
    "registry-mirrors":[
    "registry-mirrors": [
    "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
    "https://docker.m.daocloud.io",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://your_preferred_mirror",
    "https://dockerhub.icu",
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc"
    ],
    "runtimes": {
    "ascend": {
    "path": "/usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime",
    "runtimeArgs": []
    }
    }
    }

    添加完成后,需要重新加载docker的配置文件以生效:

    systemctl daemon-reload

    重启docker服务:

    systemctl restart docker.service

    启动容器:

    docker compose up -d

    如果得到以下输出,代表服务拉起成功:

    检查容器是否正常运行:

    docker compose ps

    所有容器的运行状态与占用端口如下。应该看到包含3个业务服务(api / worker / web)以及6个基础组件(weaviate / db / redis / nginx / ssrf_proxy / sandbox)在内的总共9个容器,且STATUS均为Up,服务全部挂起成功。

    (3)可视化web配置

    登录dify网页

    在浏览器内输入“本机ip:端口号”该端口号为在启动dify时更改的NGINX_PORT(见本章节(2)),若无更改,则使用默认的80端口登录。例如:网址:172.16.23.55:80

    *注意:这里又又又有一个坑啦!

    第一次输入网址大概率无法访问网页,会出现如下界面!

    原因:web 服务没有配置端口映射。需要在 web 服务下添加 ports端口配置。在dify文件夹中找到 docker-compose.yml 文件,并作以下修改:

    (1)查看现有docker端口映射情况:

    docker ps

    输出如下:

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    123456789abc nginx:latest "/docker-entrypoint…." 2 days ago Up 2 days 0.0.0.0:3000->80/tcp web_container

    如果PORT一列显示0.0.0.0:3000->80/tcp 则表明主机中的3000端口正常被映射到docker中设置的80端口,此时web服务可以被启用;若映射不完整,只显示主机端口占用情况0.0.0.0:3000或者只有docker中设置的占用端口80/tcp,那么都无法直接在网页中进行启动。此时就需要设置docker-compose中的映射端口。

    (2)切换到相应目录:

    cd D:\\Desktop\\dify-main\\dify-main\\docker #切换目录

    (3)编辑配置文件:

    vim docker-compose.yml

    (4)在service中找到 web 服务的配置部分,在原文件中的restart:always和environment中间添加ports 映射:

    # Frontend web application.   web:     image: langgenius/dify-web:0.14.1     restart: always     # 添加以下 ports 配置     ports:       – "3000:80"    # 宿主机端口号:容器端口号,将主机端口映射到之前设置的容器NGINX_PORT=80端口,注意缩进格式     environment:       CONSOLE_API_URL: ${CONSOLE_API_URL:-}       APP_API_URL: ${APP_API_URL:-}       SENTRY_DSN: ${WEB_SENTRY_DSN:-}       NEXT_TELEMETRY_DISABLED: ${NEXT_TELEMETRY_DISABLED:-0}       TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000}       CSP_WHITELIST: ${CSP_WHITELIST:-}

    • 当在宿主机上访问 http://<宿主机IP>:80(例如,http://localhost:80 或者宿主机的 IP 地址),请求将被转发到容器的 80 端口。

    • 如果没有设置端口映射,容器的端口只对容器内部可用,外部无法访问。

    :wq保存并退出后,重启docker服务:

    docker compose down
    docker compose up -d

    输出如下,则代表web端口已映射,可以在网页中打开Dify了:

    docker compose同时管理多个容器,支持web和数据库访问管理

    services 定义了应用的不同服务,如:

    • web 服务使用 Nginx 镜像,并暴露端口 80。

    • db 服务使用 MySQL 镜像,并设置环境变量 MYSQL_ROOT_PASSWORD。

    输入网址后界面如下,第一次登陆需要设置邮箱,用户名和密码等。

    模型配置:

    点击右上角用户头像,进入设置。

    (1)大语言模型(LLM)

    选择模型供应商中的OpenAI-API-compatible模块。点击添加模型。

    模型类型选择“LLM”,“模型名称”与Mind IE服务化配置dcoker文件“config.json”中的“modelName”保持一致,例如之前配置的是qwen3-32b模型,“API endpoint URL”填写“http://本机ip:qwen3-32b的port端口/v1”,。“模型上下文长度”与“最大 token 上限”按需填写。例如:http://172.16.23.55:1060

    返回首页,创造一个对话应用窗口

    创建聊天助手,进行测试。

    在右侧的聊天界面中进行Q&A

    参考资料:

    【modelscope安装】

    ModelScope初体验 – Joy-word – 博客园

    【Qwen3-32B模型权重下载】

    通义千问3-32B · 模型库

    Qwen3-32B-模型库-ModelZoo-昇腾社区

    【mindie下载】

    基于Atlas 800I A2的RAG端到端实践

    【docker环境配置】

    华为欧拉系统(openEuler)安装 Docker 容器完整教程_openeuler安装docker-CSDN博客

    解决docker镜像仓库下载慢或Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) – 谢墨尘 – 博客园

    【华为服务器部署大模型+测试】

    (99+ 封私信 / 80 条消息) 华为 Atlas 800I A2 大模型部署实战(三):MindIE 安装与部署 LLM – 知乎

    使用MindIE部署大模型——以Qwen3-32B为例_mindie部署qwen3-CSDN博客

    鲲鹏+昇腾Atlas800IA2(910B4)部署Qwen3-32B【简单自用版】_910b部署qwen3-CSDN博客

    Qwen3-32B-模型库-ModelZoo-昇腾社区

    ascend-docker-image: 提供Ascend相关的Dockerfile示例,展示如何创建docker镜像。 – Gitee.com

    https://mp.weixin.qq.com/s/Q4J77DsnKKzlQeBVbNf2qA?scene=1

    【可视化前端交互】

    【昇腾】单张48G Atlas 300I Duo推理卡MindIE+WebUI方式跑14B大语言模型_20250817_atlas300i duo qwen3-CSDN博客

    https://docs.dify.ai/zh-hans/getting-started/install-self-hosted/docker-compose

    无法打开Dify网页管理界面_dify打不开-CSDN博客

    赞(0)
    未经允许不得转载:171主机测评 » 超详细喂饭版!linux/openeuler部署Qwen3-32B等大模型华为昇腾Arm架构服务器anaconda+modelscope+mindie+docker等+openwebui可视化前端界面
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址