1 环境准备
本文所有环境基于 openEuler 22.03 LTS SP4 操作系统
1.1 网络环境
# 配置代理
PROXY_IP=192.168.230.1
PROXY_PORT=10809
export http_proxy=http://${PROXY_IP}:${PROXY_PORT}
export https_proxy=http://${PROXY_IP}:${PROXY_PORT}
export ALL_PROXY=http://${PROXY_IP}:${PROXY_PORT}
export all_proxy=socks://${PROXY_IP}:${PROXY_PORT}
1.2 安装 cuda
# 安装基础工具及内核开发包
$ yum install -y gcc-c++ make dkms kernel-source-$(uname -r) kernel-devel-$(uname -r)
# 下载 cuda 包
$ wget https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS-SP4/contrib/drivers/x86_64/Packages/cuda_12.4.0_550.54.14_linux.run -P /root
# 安装 cuda 包
$ sh /root/cuda_12.4.0_550.54.14_linux.run
......
===========
= Summary =
===========
Driver: Installed
Toolkit: Installed in /usr/local/cuda-12.4/
Please make sure that
- PATH includes /usr/local/cuda-12.4/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-12.4/lib64, or, add /usr/local/cuda-12.4/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-12.4/bin
To uninstall the NVIDIA Driver, run nvidia-uninstall
Logfile is /var/log/cuda-installer.log
# 配置 PATH 变量
$ sed -i \
-e '$a \ ' \
-e "\$a export PATH=$PATH" \
-e '$a export PATH=$PATH:/usr/local/cuda-12.4/bin' \
/etc/profile
# 刷新 /etc/profile 文件
$ source /etc/profile
# 配置库文件
$ sed -i '$a /usr/local/cuda-12.4/lib64' /etc/ld.so.conf
# 刷新动态链接库
$ ldconfig
# 查看 Nvidia 驱动版本
$ nvidia-smi
# 查看 cuda 版本
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Tue_Feb_27_16:19:38_PST_2024
Cuda compilation tools, release 12.4, V12.4.99
Build cuda_12.4.r12.4/compiler.33961263_0
1.3 安装 docker
1.3.1 安装 docker
# 定义要安装的 docker 版本及架构(x86_64、aarch64)
$ DOCKER_VERSION=26.0.0; DOCKER_ARCH=x86_64
# 从官方仓库下载二进制 docker 压缩包
$ wget https://download.docker.com/linux/static/stable/"${DOCKER_ARCH}"/docker-"${DOCKER_VERSION}".tgz -P /root
# 解压下载的压缩包
$ tar -xvf /root/docker-"${DOCKER_VERSION}".tgz -C /root
# 复制解压的命令到 /usr/bin 目录
$ cp /root/docker/* /usr/bin
# 创建 docker 组,否则会有 could not change group /var/run/docker.sock to docker: group docker not found 的警告信息,并且 cir-docker 会启动失败
$ groupadd docker
# 编写启动文件
$ cat > /etc/systemd/system/docker.service <<"EOF"
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
# 配置代理
$ mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://${PROXY_IP}:${PROXY_PORT}"
Environment="HTTPS_PROXY=http://${PROXY_IP}:${PROXY_PORT}"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF
# 修改 cgroup 为 systemd,修改日志驱动
$ [ ! -d "/etc/docker" ] && mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
# 重新加载配置
$ systemctl daemon-reload
# 启动(重启) docker
$ systemctl restart docker && systemctl enable docker
# 查看代理、Cgroup 驱动、日志驱动配置
$ docker info | grep -E "Proxy|Cgroup Driver|Logging Driver"
Logging Driver: json-file
Cgroup Driver: systemd
HTTP Proxy: http://192.168.230.1:10809
HTTPS Proxy: http://192.168.230.1:10809
No Proxy: localhost,127.0.0.1
1.3.2 安装 docker-compose
# 创建插件目录
$ mkdir -p /usr/libexec/docker/cli-plugins
# 定义要安装的 docker-compose 版本及架构(x86_64、aarch64)
$ COMPOSE_VERSION=2.33.0; COMPOSE_ARCH=x86_64
# 从官方仓库下载二进制 docker-compose 命令
$ wget https://github.com/docker/compose/releases/download/v"${COMPOSE_VERSION}"/docker-compose-linux-"${COMPOSE_ARCH}" -P /root
# 安装 docker-compose
$ install -m 755 /root/docker-compose-linux-"${COMPOSE_ARCH}" /usr/libexec/docker/cli-plugins/docker-compose
# 验证 docker-compose 是否安装成功
$ docker compose version
Docker Compose version v2.33.0
2 安装(卸载)ollama
2.1 安装 ollama
2.1.1 在线安装
参考文档:ollama/docs/linux.md at main · ollama/ollama · GitHub
# 安装 ollama(若不指定版本则安装最新版本)
$ curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=0.5.11 sh
# 修改 ollama 监听地址,默认监听在回环网卡
$ sed -i '/^Environment=.*/i Environment="OLLAMA_HOST=0.0.0.0:11434"' /etc/systemd/system/ollama.service
# 重新加载配置
$ systemctl daemon-reload
# 重新启动 ollama
$ systemctl restart ollama
# 查看监听的地址
$ netstat -anpt | grep ollama
tcp6 0 0 :::11434 :::* LISTEN 110562/ollama
2.1.2 本地安装
参考文档:ollama/docs/linux.md at main · ollama/ollama · GitHub
# 指定要安装的 ollama 版本及架构(amd64、arm64)
$ OLLAMA_VERSION=0.5.11; OLLAMA_ARCH=amd64
# 下载安装包
$ wget https://github.com/ollama/ollama/releases/download/v"${OLLAMA_VERSION}"/ollama-linux-"${OLLAMA_ARCH}".tgz -P /root
# 解压并安装
$ tar -xvf /root/ollama-linux-"${OLLAMA_ARCH}".tgz -C /usr
# 创建 ollama 用户、组
$ useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
usermod -a -G ollama $(whoami)
# 编写 service 文件
$ cat > /etc/systemd/system/ollama.service <<EOF
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="PATH=$PATH"
[Install]
WantedBy=default.target
EOF
# 重载配置文件
$ systemctl daemon-reload
# 启动 ollama 并设置开机自启
$ systemctl start ollama && systemctl enable ollama
# 查看监听的地址
$ netstat -anpt | grep ollama
tcp6 0 0 :::11434 :::* LISTEN 2650/ollama
2.2 卸载 ollama
# 停止 ollama 服务
$ systemctl stop ollama && systemctl disable ollama
# 删除 service 文件
$ rm -rf /etc/systemd/system/ollama.service
# 删除 ollama 二进制文件
$ rm -rf $(which ollama)
# 删除 ollama 库文件
$ rm -rf /usr/local/lib/ollama
# 删除 ollama 用户、组
$ groupdel ollama
userdel ollama
# 删除家目录(同时会删除家目录下的大模型文件)
$ rm -rf /usr/share/ollama
2.3 ollama 使用指南
2.3.1 命令使用指南
$ ollama
Usage:
ollama [flags]
ollama [command]
Available Commands:
serve Start ollama # 启动 ollama 服务
create Create a model from a Modelfile # 从 Modelfile 文件创建模型
show Show information for a model # 显示模型信息
run Run a model # 运行模型,若不存在则先下载
stop Stop a running model # 停止正在运行的模型
pull Pull a model from a registry # 从仓库拉取模型
push Push a model to a registry # 推送模型到仓库
list List models # 列出所有模型
ps List running models # 列出正在运行的模型并查看资源消耗
cp Copy a model # 复制模型
rm Remove a model # 删除模型
help Help about any command # 查看命令帮助
Flags:
-h, --help help for ollama # 查看命令帮助
-v, --version Show version information # 查看版本
2.3.2 相关环境变量
(1)OLLAMA_HOST
:指定 ollama 服务的监听地址及端口
- 参考文档:ollama/api/client.go at main · ollama/ollama · GitHub
- 使用场景:ollama 服务默认监听地址为 127.0.0.1,需要从外部访问或调用 ollama 服务
- 使用方法:指定监听的地址和端口
OLLAMA_HOST=0.0.0.0:11434
(2)OLLAMA_NUM_PARALLEL
:每个模型同时处理的并行请求的最大数量
- 参考文档:ollama/docs/faq.md at main · ollama/ollama · GitHub
- 使用场景:每个模型需要处理多个并发
- 使用方法:默认值将根据可用内存自动选择 4 或 1,若有需要可以手动调整
OLLAMA_NUM_PARALLEL=10
(3)OLLAMA_MAX_QUEUE
:当 ollama 忙碌时,它在拒绝额外请求之前将排队的最大请求数量
- 参考文档:ollama/docs/faq.md at main · ollama/ollama · GitHub
- 使用场景:调整 ollama 忙碌时可以排队的最大请求数量
- 使用方法: 默认值是 512,若有需要可以手动调整
OLLAMA_MAX_QUEUE=256
(4)OLLAMA_MAX_LOADED_MODELS
:可同时加载的最大模型数量
- 参考文档:ollama/docs/faq.md at main · ollama/ollama · GitHub
- 使用场景:同时需要加载多个模型(如果已加载一个或多个模型时,没有足够的可用内存来加载新的模型请求,所有新的请求将被排队,直到新模型能够被加载。当先前的模型变为闲置时,将卸载一个或多个模型以腾出空间给新模型。排队的请求将按顺序处理。在使用 GPU 推理时,新模型必须能够完全适应 VRAM,以允许并发加载模型。)
- 使用方法:默认值为 CPU 或 GPU 的 3 倍,若有需要可以手动调整
OLLAMA_MAX_LOADED_MODELS=6
(5)CUDA_VISIBLE_DEVICES
:限制 ollama 可使用的 NVIDIA 显卡
- 参考文档:ollama/docs/gpu.md at main · ollama/ollama · GitHub
- 使用场景:系统中有多块 NVIDIA 显卡,需要限制 ollama 只使用其中一部分或完全不使用显卡
使用方法:
- 使用数字 ID:执行
nvidia-smi
命令获取显卡的序号,然后定义环境变量CUDA_VISIBLE_DEVICES=0,1
- 使用 UUID:执行
nvidia-smi -L
命令获取显卡 UUID,然后定义环境变量CUDA_VISIBLE_DEVICES=GPU-1831a5ee-622a-7e65-06cc-d57de8902585,GPU-d21e966e-7a89-884f-d0b2-444d371bb8f9
- 不使用显卡:若想忽略显卡并强制使用 CPU,可以使用一个无效的 GPU ID,例如
CUDA_VISIBLE_DEVICES=-1
- 使用数字 ID:执行
3 安装(使用)Dify
3.1 安装 Dify
# 克隆 Dify 源代码至本地环境
$ git clone https://github.com/langgenius/dify.git
# 进入 Dify 源代码目录
$ cd dify
# 切换到需要的版本
$ git checkout 0.15.3
# 进入 Dify 源代码的 Docker 目录
$ cd docker
# 复制环境配置文件
$ cp .env.example .env
# 启动 Docker 容器
$ docker compose up -d
[+] Running 74/74
✔ api Pulled 211.9s
✔ sandbox Pulled 213.7s
✔ redis Pulled 161.0s
✔ weaviate Pulled 8.8s
✔ worker Pulled 211.9s
✔ db Pulled 157.2s
✔ web Pulled 133.0s
✔ ssrf_proxy Pulled 83.6s
✔ nginx Pulled 19.2s
[+] Running 11/11
✔ Network docker_default Created 0.0s
✔ Network docker_ssrf_proxy_network Created 0.0s
✔ Container docker-web-1 Started 0.4s
✔ Container docker-sandbox-1 Started 0.3s
✔ Container docker-ssrf_proxy-1 Started 0.5s
✔ Container docker-redis-1 Started 0.3s
✔ Container docker-weaviate-1 Started 0.4s
✔ Container docker-db-1 Started 0.4s
✔ Container docker-api-1 Started 0.5s
✔ Container docker-worker-1 Started 0.6s
✔ Container docker-nginx-1 Started 0.7s
# 查看 3 个业务服务 api/worker/web,以及 6 个基础组件 weaviate/db/redis/nginx/ssrf_proxy/sandbox 是否运行
$ docker compose ps
在 Windows 浏览器中访问 http://${your_server_ip}/install 进入管理员初始化页面,设置管理员账户
在 Windows 浏览器中访问 http://${your_server_ip} 进入主页面
评论