基本流程
一、在项目中添加一个start.sh的shell脚本,在服务器上,直接运行该脚本,在脚本环境中执行即可。
#!/bin/bash
cd /ai/llmdata/home/yuanxf/mytemp/
echo "当前执行路径为 $(pwd)"
# 激活conda环境,找到对应命令脚本所在位置,在本脚本中source激活该命令。
source /ai/llmdata/software/anconda3/etc/profile.d/conda.sh
conda activate finetunePy10
echo "当前执行环境为 $(which python)"
# 启动命令,下面的swift其实是当前Python环境下的一个包并带了命令行。
# 对于该类带参数的命令,可以把SWIFT_UI_LANG=zh WEBUI_SERVER=0.0.0.0 WEBUI_PORT=7861单独作为环境变量export使用
SWIFT_UI_LANG=zh WEBUI_SERVER=0.0.0.0 WEBUI_PORT=7861 swift web-ui
#或者如下
export SWIFT_UI_LANG=zh
export WEBUI_SERVER=0.0.0.0
export WEBUI_PORT=7861
swift web-ui #这在python下执行的。
后台执行这个start.sh,命令如下:
# 日志会保存到当前目录下,nohup.out文件中。
nohup ./start.sh &
二、项目代码是用docker执行的话,会先构建一个基础镜像。
- 先构建dockerfile文件,如下:
# 下载拉取基础镜像,我这是Python3.10的image
FROM python:3.10
# 设置工作目录
WORKDIR /project
# 清空容器内目录
RUN rm -rf /project
#提前配置pip install的环境
RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple && pip install --upgrade pip
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#公开端口,可以不用指定,在run docker时,可以用-p 做端口映射
EXPOSE 5001
# 容器运行时执行命令,多条CMD只认最后一条,而且是容器container start要执行的命令。dockerfile中其他内容都是在构建image时执行的命令。
CMD bash /project/start.sh
- start.sh文件如下,在这里可以整好几个项目和环境,看自己发挥了。建议放在project/下。
#!/bin/sh
# 项目1
pip install -r /project/ReportChecker/requirements.txt
export PYTHONPATH=$PYTHONPATH:/project/ReportChecker/
python /project/ReportChecker/run.py
- 构建本地docker image,同时启动容器,需要把容器中的代码目录/project映射出去到宿主机中,方便代码及脚本更新和拷贝。docker run之前,要把资源先放好。在宿主机中执行如下命令行
# 进入dockerfile文件所在处,执行后通过docker images可以查到
docker build -t mypythonenv:v1 .
# 执行容器
docker run -d --name pyproject -p 500:5001 -v /home/project/:/project/ mypythonenv:v1
# 此处,端口把容器内的5001挂在到宿主机的500端口上对外了。文件夹映射也是一样,把容器的/project/挂载到了服务器宿主的/home/project下。
# 接下来docker ps -ef 查看容器情况,如果退出,可以看日志,一般都是你的文件脚本没放好,直接修改。没启动也没必要重新搞,只要把这个命令CMD bash /project/start.sh涉及到的内容修正好,再docker start pyproject 就好了。