无sudo或者root部署

在没有 rootsudo 权限的情况下,你仍然可以通过一些调整来完成部署,特别是在启动 Docker 容器时。以下是优化的思路,针对你不能使用 rootsudo 权限的情况,提供的几种解决方案:

1. 无 rootsudo 权限使用 Docker

方法一:将当前用户添加到 Docker 组
默认情况下,Docker 需要 root 权限才能管理容器,但你可以通过将当前用户加入到 docker 用户组,来避免使用 sudo 命令。

sudo usermod -aG docker $(whoami)

注意:虽然这一步需要 sudo 权限,但这是一劳永逸的解决方案。执行完之后,你需要 注销并重新登录,之后就可以以非 root 权限运行 Docker 命令。

如果你完全无法使用 sudo,请联系系统管理员来帮助你完成这一步。

方法二:使用 podman 替代 Docker
如果无法以非 root 权限运行 Docker,可以考虑使用 podman,它是一个与 Docker 兼容的工具,允许在不使用 root 权限的情况下运行容器。

你可以尝试在你的系统上安装并使用 podmanpodmandocker 共享很多相同的命令,直接替换命令即可。例如,使用 podman run 而不是 docker run

2. 在不使用 rootsudo 权限情况下启动大模型服务的优化脚本

假设你已通过 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 查看服务。"

脚本优化说明

  1. root 权限的 Docker 使用:在用户已经添加到 Docker 组后,无需再使用 sudo 运行脚本。脚本中的 Docker 命令将以当前用户权限执行。

  2. 文件和目录检查:依旧检查 Conda 环境压缩包和模型文件的存在,确保部署过程顺利进行。

  3. 删除容器时无 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 权限 的用户运行容器,所以无需任何 sudoroot 权限操作。


4. 总结

通过将当前用户加入到 Docker 组或使用 podman 替代 Docker,你可以在不使用 rootsudo 权限的情况下运行 Docker 容器。优化后的脚本移除了对 sudo 的依赖,并通过简单的检查和管理来确保整个部署过程无缝进行。

如果你无法进行这些调整,可能需要联系系统管理员来协助你完成环境配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值