[题记]2025/6/21-6/22 两天辛苦的成果 ,有的是靠回忆写的,欢迎指正
1.环境基础
Redhat
查看redhat版本
cat /etc/redhat-release 7.9 Maipo
docker和docker compose安装
参考
https://zhuanlan.zhihu.com/p/14648196830
docker下载地址
https://download.docker.com/linux/static/stable/x86_64/
docker-compose下载地址
https://github.com/docker/compose/releases/tag/v2.37.1
安装过程
考虑到很多公司禁止使用知乎,再复制一下
(1)将docker-26.0.0.tgz压缩包与docker-compose-linux-x86_64上传到 /tmp
目录下
(2)解压docker-26.0.0.tgz压缩包并复制到/usr/bin/路径
tar -zxvf docker-*.tgz
sudo cp docker/* /usr/bin/
(3)对docker-compose-linux-x86_64文件重命名并添加可执行权限
mv docker-compose-* docker-compose
chmod +x docker-compose
(4)将docker-compose复制到/usr/bin并查看版本
sudo cp docker-compose /usr/bin/
docker-compose version
(5)创建docker.service文件
cd /etc/systemd/system/
touch docker.service
文件内容
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
(7)添加可执行权限并加载
sudo chmod +x /etc/systemd/system/docker.service
sudo systemctl daemon-reload
(8)启动docker并查看状态
sudo systemctl start docker
sudo systemctl status docker
(9)设置开机启动并查看版本
sudo systemctl enable docker.service
docker -v
安装NVIDIA Container Toolkit
NVIDIA 驱动版本确认---非必须
运行 nvidia-smi --query-gpu=name,driver_version --format=csv
检查NVIDIA 驱动版本。
-----我的是525
NVIDIA 驱动版本 525(R525) 与 NVIDIA Container Toolkit 的版本之间没有严格的绑定关系,但需要确保驱动版本和 Toolkit 的 CUDA 版本兼容。
NVIDIA 驱动 525 支持 CUDA 12.0 及以下版本(如 CUDA 11.8、11.7 等)。
nvidia-smi 查看是12
离线安装包准备
Debian/Ubuntu:使用
.deb
包。RHEL/CentOS:使用
.rpm
包。系统架构:通常为
x86_64
(64位)
1)在联网的 RHEL/CentOS 7.9机器上添加 NVIDIA 仓库:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
2)安装 yumdownloader
工具
sudo yum install -y yum-utils
创建个文件夹存放
mkdir -p ~/nvidia-container-toolkit-offline
cd ~/nvidia-container-toolkit-offline
3)下载 .rpm
包及其依赖
sudo yumdownloader --resolve --destdir . nvidia-container-toolkit
安装
1).rpm
包
cd /tmp/nvidia-container-toolkit-offline
sudo yum localinstall -y *.rpm
注意可能会报错:
error:Failed dependencies:
libseccomp.so.2()(64bit) is needed by
注意这个不用额外去下载,因为一般redhat自带,只是默认没有安装
sudo yum install libseccomp 即可一般都是大于 2版本的
验证
//第一行不知道需不需要
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
新建nvidia-container-toolkit.repo文件
文件名称:nvidia-container-toolkit.repo 内容:
[nvidia-container-toolkit]
name=nvidia-container-toolkit
baseurl=https://nvidia.github.io/libnvidia-container/stable/rpm/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://nvidia.github.io/libnvidia-container/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
[nvidia-container-toolkit-experimental]
name=nvidia-container-toolkit-experimental
baseurl=https://nvidia.github.io/libnvidia-container/experimental/rpm/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=0
gpgkey=https://nvidia.github.io/libnvidia-container/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
需要放置到:
/etc/yum.repos.d/
要是没有权限,可以使用 sudo vim
可选:sudo dnf-config-manager --enable nvidia-container-toolkit-experimental
把nvidia配置给docker
前提是已经完成上面3步
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
参照
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installation
最终验证
下载unbuntu镜像验证
在有网的环境:
docker pull ubuntu:latest
docker save -o ubuntu_latest.tar ubuntu:latest
将生成的 ubuntu_latest.tar 文件拷贝到目标离线机器上
docker load -i ubuntu_latest.tar
验证语句
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
输出类似于
报错
could not select device driver "" with capabilities:: [gpu]
是NVIDIA Container Toolkit没有安装好
再次确认是不是这几个文件,我的下载分享里面有
再次执行 sudo yum localinstall -y *.rpm
可选
可选:设置默认 runtime 为 nvidia(可选)
编辑 /etc/docker/daemon.json(创建文件如果不存在):
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
报错
1.注册nvidia 真人认证报错
Validator failed to load, please check your browser settings, such as ad blockers.
需要使用ipv4
2.Ollama安装
在线下载
docker pull ollama/ollama:latest
docker save -o ollama_latest.tar ollama/ollama:latest 下载不到的留言给我
本地docker home验证
上传到离线电脑,进入存放tar文件的目录
sudo docker load -i ollama_latest.tar
docker run -d -v ollama:/root/.ollama -p 11434:11434 ollama/ollama:latest
-v ollama:/root/.ollama
: 将名为 ollama
的 Docker 卷挂载到容器内部的 /root/.ollama
路径。这意味着任何写入容器内该路径的数据都会被存储在 Docker 卷 ollama
中,从而允许数据持久化并可在其他容器中使用
拷贝出来到windows 桌面
3.千问
下载qianwen14
我是进入本地docker home的docker 内部执行 :
ollama pull qwen:14b
将下载的千问模型导出到本地
linux: docker cp ollama:/root/.ollama/models /path/to/local/directory
因为我是用windows上的docker home下载的,所以运行cmd并输入以下内容就可以拷贝到桌面
docker cp boring_ride:/root/.ollama/models C:/Users/%USERNAME%/Desktop/ollama_models
下载完成后的文件夹
上传到远程计算机
把容器外的文件copy到容器内root/.ollama/models目录下
1)copy manifests文件夹 到容器内: 注意没有双引号
sudo docker cp xxx/manifests/ 容器ID:/root/.ollama/models/
2)同理copy blobs文件夹
如果想进到容器去看,可以sudo docker exec -it dockerID /bin/sh
可以用ls查看文件夹找到root文件夹,进入root文件夹可以用 ls -la 看到.llama这种隐藏式文件夹
3)重启docker服务:
4)验证: 在宿主机内执行: curl http://localhost:11434/api/tags
会输出 models信息即安装成功,注意记下model 名称
postman调用
POST http://ip:11434/api/generate
选择Body json
参数
{
"models": "qwen:14b",
"prompt": "请描述量子力学"
}