在没有 root
或 sudo
权限的情况下,你仍然可以通过一些调整来完成部署,特别是在启动 Docker 容器时。以下是优化的思路,针对你不能使用 root
或 sudo
权限的情况,提供的几种解决方案:
1. 无 root
或 sudo
权限使用 Docker
方法一:将当前用户添加到 Docker 组
默认情况下,Docker 需要 root
权限才能管理容器,但你可以通过将当前用户加入到 docker
用户组,来避免使用 sudo
命令。
sudo usermod -aG docker $(whoami)
注意:虽然这一步需要 sudo
权限,但这是一劳永逸的解决方案。执行完之后,你需要 注销并重新登录,之后就可以以非 root
权限运行 Docker 命令。
如果你完全无法使用 sudo
,请联系系统管理员来帮助你完成这一步。
方法二:使用 podman
替代 Docker
如果无法以非 root
权限运行 Docker,可以考虑使用 podman
,它是一个与 Docker 兼容的工具,允许在不使用 root
权限的情况下运行容器。
你可以尝试在你的系统上安装并使用 podman
。podman
和 docker
共享很多相同的命令,直接替换命令即可。例如,使用 podman run
而不是 docker run
。
2. 在不使用 root
或 sudo
权限情况下启动大模型服务的优化脚本
假设你已通过 docker
用户组或 podman
,可以在非 root
用户下启动 Docker 容器,我将提供一个不需要 root
权限的优化版本的 Shell 脚本。
#!/bin/bash
# 部署大模型服务脚本
# 使用方法: ./deploy_model.sh
# 设置变量
CONTAINER_NAME="model_service"
IMAGE_NAME="ubuntu:20.04"
CONDA_ENV_TAR="conda_env_model.tar.gz"
HOST_PORT=5000
CONTAINER_PORT=5000
MODEL_DIR="/app/model/Qwen2___5-7B-Instruct"
START_COMMAND="python -m vllm.entrypoints.openai.api_server --model /app/model/Qwen2___5-7B-Instruct --served-model-name Qwen2.5-7B-Instruct --max-model-len=2048"
# 检查 Docker 是否安装
if ! command -v docker &> /dev/null
then
echo "Docker 未安装,请先安装 Docker 或 Podman。"
exit 1
fi
# 检查 Conda 环境压缩包是否存在
if [ ! -f "$CONDA_ENV_TAR" ]; then
echo "Conda 环境压缩包 $CONDA_ENV_TAR 不存在。"
exit 1
fi
# 检查模型权重文件是否存在
if [ ! -d "model/Qwen2___5-7B-Instruct/" ]; then
echo "模型权重目录 model/Qwen2___5-7B-Instruct/ 不存在。"
exit 1
fi
# 如果容器已存在,先停止并删除
if [ "$(docker ps -a | grep $CONTAINER_NAME)" ]; then
echo "停止并删除已有的容器 $CONTAINER_NAME ..."
docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME
fi
# 创建容器
echo "创建容器 $CONTAINER_NAME ..."
docker run -d --name $CONTAINER_NAME -p $HOST_PORT:$CONTAINER_PORT $IMAGE_NAME sleep infinity
# 复制模型权重到容器
echo "复制模型权重到容器 ..."
docker cp model/Qwen2___5-7B-Instruct/ $CONTAINER_NAME:$MODEL_DIR/
# 复制 Conda 环境压缩包到容器
echo "复制 Conda 环境压缩包到容器 ..."
docker cp $CONDA_ENV_TAR $CONTAINER_NAME:/tmp/
# 在容器中安装必要的系统依赖和 Miniconda
echo "在容器中安装系统依赖和 Miniconda ..."
docker exec $CONTAINER_NAME bash -c "
apt-get update && \
apt-get install -y wget bzip2 ca-certificates curl git && \
rm -rf /var/lib/apt/lists/* && \
wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && \
bash /tmp/miniconda.sh -b -p /opt/conda && \
rm /tmp/miniconda.sh && \
export PATH=/opt/conda/bin:\$PATH && \
conda config --set always_yes yes --set changeps1 no && \
mkdir -p /opt/conda_env && \
tar -xzf /tmp/$CONDA_ENV_TAR -C /opt/conda_env && \
rm /tmp/$CONDA_ENV_TAR && \
pip install vllm
"
# 设置环境变量并启动大模型服务
echo "设置环境变量并启动大模型服务 ..."
docker exec $CONTAINER_NAME bash -c "
export PATH=/opt/conda_env/bin:\$PATH && \
cd / && \
$START_COMMAND &
"
echo "大模型服务已成功部署并启动。访问 http://<宿主机IP>:$HOST_PORT 查看服务。"
脚本优化说明
-
非
root
权限的 Docker 使用:在用户已经添加到 Docker 组后,无需再使用sudo
运行脚本。脚本中的 Docker 命令将以当前用户权限执行。 -
文件和目录检查:依旧检查 Conda 环境压缩包和模型文件的存在,确保部署过程顺利进行。
-
删除容器时无
sudo
:无需sudo
删除已有的容器,也无需sudo
来执行任何 Docker 命令。
3. Podman
替代 Docker(无 root
权限)
如果你使用的是 podman
,可以直接将脚本中的 docker
命令替换为 podman
命令:
podman run -d --name $CONTAINER_NAME -p $HOST_PORT:$CONTAINER_PORT $IMAGE_NAME sleep infinity
Podman
的好处在于它天然支持 无 root
权限 的用户运行容器,所以无需任何 sudo
或 root
权限操作。
4. 总结
通过将当前用户加入到 Docker 组或使用 podman
替代 Docker,你可以在不使用 root
或 sudo
权限的情况下运行 Docker 容器。优化后的脚本移除了对 sudo
的依赖,并通过简单的检查和管理来确保整个部署过程无缝进行。
如果你无法进行这些调整,可能需要联系系统管理员来协助你完成环境配置。