【rasa】国产化平台使用docker部署rasa

公司想使用国产化平台部署一个对话机器人。

开发bot的时候使用常见的x86+cuda+英伟达显卡+ubuntu,所有依赖安装的都比较顺利。
部署太费劲了我的妈,赶紧把阿美立卡收为国有,这样就不用费劲国产化了
将自己中间遇到的一些坑写出来,以供参考。

目标平台配置信息

系统:麒麟v10
cpu:飞腾S2500
显卡:无

主要依赖库

rasa
torch
transformer

事前准备

麒麟v10最好不要升级docker,会导致glibc自己升级,导致服务器死机(只能重装系统)。
由于rasa要求的python版本比较高,目标平台也不能联网,因此使用docker部署。
我使用buildx在开发机上进行多平台构建。

安装Docker buildx

据说Docker > = 19.03的版本里包含的buildx,但是我的机器上没有,因此将buildx的安装过程也记录下来。

  1. 安装qemu
sudo apt install qemu qemu-kvm virt-manager bridge-utils
  1. 安装docker buildx
    1. 在buildx的release页面中下载适合自己系统的二进制文件:github-release
    2. 将二进制文件拷贝到$HOME/.docker/cli-plugins
    3. 给二进制文件添加执行权限:chmod +x ~/.docker/cli-plugins/docker-buildx
    4. 启用实验特性:编辑 ~/.docker/config.json文件(如果没有就新建一个),增加以下内容:
{ 
	"experimental": "enabled" 
}

打包镜像

编写dockerfile
dockerfile文件
# using ubuntu LTS version  
FROM ubuntu:20.04 AS builder-image  
  
# avoid stuck build due to user prompt  
ARG DEBIAN_FRONTEND=noninteractive  
  
RUN apt update &&  \  
    apt install software-properties-common -y &&  \  
    add-apt-repository ppa:deadsnakes/ppa && \  
    apt install --no-install-recommends -y python3.10 python3.10-dev python3.10-venv python3-pip python3-wheel build-essential && \  
    apt install rustc -y && apt install cargo -y && \  
    apt clean && rm -rf /var/lib/apt/lists/*  
ENV GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 && \  
ENV GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 &&  \  
ENV PATH="$HOME/.cargo/bin:$PATH"  
  
# create and activate virtual environment  
# using final folder name to avoid path issues with packages  
RUN python3.10 -m venv /home/myuser/venv  
ENV PATH="/home/myuser/venv/bin:$PATH"  
  
# install requirements  
COPY requirements.txt .  
COPY tensorflow_text-2.13.0-cp310-cp310-linux_aarch64.whl .  

# pip安装
RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ &&  \  
    pip install --upgrade pip setuptools &&  \  
    pip install --no-cache-dir ez_setup numpy &&  \  
    python -m pip install --upgrade pip &&  \  
    pip install --no-cache-dir wheel && \  
    pip install --no-cache-dir tensorflow_text-2.13.0-cp310-cp310-linux_aarch64.whl && \  
    pip install --no-cache-dir torch==1.12 torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu 
RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/   

# runner image
FROM ubuntu:20.04 AS runner-image  
RUN apt update &&  \  
    apt install software-properties-common -y &&  \  
    add-apt-repository ppa:deadsnakes/ppa && \  
    apt install --no-install-recommends -y python3.10 python3.10-dev python3.10-venv python3-pip python3-wheel build-essential && \  
    apt clean && rm -rf /var/lib/apt/lists/*  
  
RUN useradd --create-home myuser  
COPY --from=builder-image /home/myuser/venv /home/myuser/venv  
ENV LD_PRELOAD=$LD_PRELOAD:/home/myuser/venv/python3.10/lib/site-packages/scikit_learn.libs/libgomp-d22c30c5.so.1.0.0 
ENV LD_PRELOAD=$LD_PRELOAD:/home/myuser/venv/python3.10/lib/site-packages/faiss_cpu.libs/libgomp-d22c30c5.so.1.0.0  
USER myuser  
RUN mkdir /home/myuser/code  
WORKDIR /home/myuser/code  
COPY ./models/to_docker /home/myuser/  
USER root  
RUN sh -c "chmod a+x /home/myuser/start.sh"  
USER myuser  

# make sure all messages always reach console  
ENV PYTHONUNBUFFERED=1  
  
# activate virtual environment  
ENV VIRTUAL_ENV=/home/myuser/venv  
ENV PATH="/home/myuser/venv/bin:$PATH"  

CMD ["/bin/sh","-c","/home/myuser/start.sh"]
构建镜像
docker buildx build --platform linux/arm64/v8 -t rasa-armv8:0.1.1 .
一些注意点

依赖包的安装顺序应为:下载到本地的安装包 > torch依赖但是官方index-url没有列出的包 > torch > 其他

  1. 有一些依赖包没有官方的aarch64版本,因此需要自己从源代码安装,或者从网上找别人编译好的版本安装。
  2. 安装torch需要严格按照torch官方给出的命令。torch+cpu官方的index-url里的numpy没有aarch64版本,因此在安装pytorch的时候要先安装numpy。
  3. 安装一些依赖包的时候可能出现‘Command “python setup.py egg_info” failed with error code 1’错误,解决办法如下:
    1. 升级setuptools:pip install –upgrade setuptools
    2. 升级pip:python -m pip install -U pip
    3. 安装ez_setup:pip install ez_setup
  4. requirements文件里最好只列出关键依赖包和版本即可,pip freeze的结果可能在安装的过程中导致依赖互相冲突,需要pip自动解决冲突。

镜像打包和运行过程中还有可能遇到的其他错误:

  1. libgomp cannot allocate memory in static TLS block
ImportError: /home/myuser/venv/lib/python3.10/site-packages/faiss/../faiss_cpu.libs/libgomp-d22c30c5.so.1.0.0: cannot allocate memory in static TLS block
ImportError: /home/myuser/venv/lib/python3.10/site-packages/sklearn/__check_build/../../scikit_learn.libs/libgomp-d22c30c5.so.1.0.0: cannot allocate memory in static TLS block
Failed to import transformers.data.data_collator because of the following error (look up to see its traceback):
/home/myuser/venv/lib/python3.10/site-packages/torch/lib/libgomp-d22c30c5.so.1: cannot allocate memory in static TLS block

在runner镜像中使用ENV LD_PRELOAD=$LD_PRELOAD:报错的文件路径设置环境变量。

  1. rasa报错:No agent loaded. To continue processing, a model of a trained agent needs to be loaded.
    这种情况通常是因为运行环境的rasa版本比训练模型的rasa版本高,重新训练一个模型即可。

  2. docker build qemu: qemu_thread_create: Operation not permitted
    不知道别人怎么解决,我在构建命令前加了sudo,没有再出现报错。

  3. pip安装失败
    可能是因为pip的索引到的依赖包没有aarch64版本,此时需要搜索是否有其他人编译过,或者自行从源代码安装。

Docker是一个开源的容器平台,可以帮助开发者将应用程序及其依赖项打包成一个独立的容器,以便在不同的环境中进行部署和运行。通过使用Docker,您可以更轻松地管理和扩展应用程序,并确保应用程序在不同的环境中具有一致的行为。 如果您想检查是否已经安装Docker,可以运行以下命令:docker -v && docker-compose -v。这个命令会显示您安装DockerDocker Compose的版本信息。如果命令不起作用,那么您需要安装Docker。您可以参考Docker的官方文档进行安装和配置。\[1\]\[2\] 另外,如果您想构建一个Docker镜像,可以使用以下命令:docker build -t rasa/actions:travel2.7.0 .。这个命令会在Dockerfile所在的目录中构建一个名为rasa/actions:travel2.7.0的镜像。\[3\] 希望这些信息对您有帮助!如果您还有其他问题,请随时提问。 #### 引用[.reference_title] - *1* *2* [在 Docker Compose 中部署 Rasa 开源助手](https://blog.csdn.net/weixin_42486623/article/details/122240857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Docker部署Rasa+MySQL+Neo4j](https://blog.csdn.net/weixin_41260141/article/details/123405002)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值