在Ubuntu上部署OpenMAIC
1. 安装WSL2
使用管理员启动PowerShell,执行启用WSL2:
# 启用WSL功能:/all -- 所有用户启用,/norestart -- 不重启系统
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# WSL2 依赖 Windows 虚拟机功能,需要额外启用
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 将WSL2设为默认WSL
wsl --set-default-version 2
执行完成之后,重启win10/win11。
接下来在WSL2中安装Ubuntu系统。
# 查看可用的WSL发行版本
wsl --list --online
# 安装过程中,在用户目录下如果有.wslconfig引起的错误,可用直接上这个配置文件
# 安装过程中,会提示输入用户名和密码,输入完成之后就安装完成了
wsl --install -d Ubuntu-26.04 --location D:\WSL\Ubuntu-26.04
其他命令列表:
# 退出 WSL
wsl --shutdown
# 验证安装
wsl -l -v
# 启动
wsl -d Ubuntu-26.04
# 删除命令
wsl --unregister Ubuntu-26.04
Remove-Item -Recurse -Force "D:\WSL\Ubuntu-26.04"
如果Windows系统上安装了Nvidia CUDA套件,WSL2会自动安装Nvidia驱动程序,并且可以直接使用GPU进行计算。使用命令nvidia-smi可以验证GPU是否可用。
安装并启动之后,可以在Windows中访问WSL2中的Ubuntu系统,比如在文件管理器中输入路径\\wsl$\Ubuntu-26.04\home\<用户名>\。也可以从WSL/Ubuntu系统中访问Windows文件系统,比如输入路径/mnt/d/访问D盘。
1.1. WSL2/Ubuntu 26.04 系统配置
Ubuntu 26.04系统更换软件源。备份之后清空文件/etc/apt/sources.list.d/ubuntu.sources,并粘贴如下内容:
Types: deb
URIs: https://mirrors.aliyun.com/ubuntu
Suites: resolute resolute-updates resolute-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: https://mirrors.aliyun.com/ubuntu
Suites: resolute-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
安装必要的软件:
sudo apt install -y git cmake build-essential wget unzip vim htop
sudo apt install python3 python3-pip -y
资料:
- WSL2 完全指南:在 Windows 上安装和使用 Linux 的终极教程:备注:不要参考文中关于docker的安装部分
- Ubuntu26.04 可以稳定使用的国内源
1.2. WSL清理及备份
首先查看Ubuntu占用空间分配情况:
usdo apt install -y ncdu
sudo ncdu --exclude="mnt*" --exclude="proc*" /
#####################
# docker 清理
docker volume prune # 清理 无用的volumes
docker system prune # 删除无用的镜像和容器及构建缓存
# 删除不必要的docker
docker images
docker rmi xxx
执行WSL压缩(在windows/powrshell环境下):
wsl --shutdown
diskpart
DISKPART> select vdisk file="D:\WSL\Ubuntu-26.04\ext4.vhdx"
DISKPART> compact vdisk
DISKPART> detach vdisk
# 退回到Powershell环境
备份及恢复命令:
# 备份指定系统到指定位置
wsl --export Ubuntu-26.04 D:\Ubuntu-26.04.tar
# 还原指定系统
wsl --import Ubuntu-26.04 D:\Ubuntu-26.04.tar
2. 安装Nodejs以及pnpm
需要安装Node.js和pnpm,并更换源,命令如下:
# 可以使用nvm在本地安装Node.js以及npm,并选择Node.js/npm 的版本
# nvm是一个Node.js版本管理工具:https://github.com/nvm-sh/nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash
nvm install 24 # 安装Node.js 24版本
nvm use 24 # 切换到Node.js 24版本
node -v # 验证Node.js版本
# 也可以管理员安装Node.js
sudo apt install nodejs npm
node -v # 验证Node.js版本
npm -v # 验证npm版本
# 安装pnpm
npm install -g pnpm
# 更换源为阿里云,阿里云速度快,同步及时
npm config set registry https://registry.npmmirror.com
pnpm config set registry https://registry.npmmirror.com
3. 安装 docker 以及 NVIDIA Container Toolkit
需要在带Nvidia GPU的服务器上部署MinerU。不带GPU的服务器,使用CPU运行MinerU,性能会非常差。
MinerU可以使用本地部署,或者使用docker部署。使用docker部署+Nvidia GPU,需要安装NVIDIA Container Toolkit。
首先在WSL2/Ubuntu系统上安装docker,命令如下:
sudo apt-get update
sudo apt-get install -y ca-certificates curl util-linux-extra
sudo install -m 0755 -d /etc/apt/keyrings
# 从阿里云下载 GPG key
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 使用阿里云仓库,原始仓库国内连接不上
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 将当前用户添加到docker用户组中,以便不使用sudo运行docker命令
sudo usermod -aG docker $USER
newgrp docker
再执行安装NVIDIA Container Toolkit的命令:
# Install the prerequisites for NVIDIA Container Toolkit
sudo apt-get update && sudo apt-get install -y --no-install-recommends ca-certificates curl gnupg2
# Configure the production repository and the GPG key
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# Optional: use experimental packages
sudo sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
# Install the NVIDIA Container Toolkit packages
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.19.1-1
sudo apt-get install -y \
nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}
安装完成之后,执行如下命令配置docker使用NVIDIA Container Toolkit:
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
验证 NVIDIA Container Toolkit 是否安装成功:
docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi
3.1. 配置 docker Hub 仓库镜像
sudo tee /etc/docker/daemon.json <<EOF
{
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
},
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://mirror.baidubce.com"
]
}
EOF
sudo systemctl restart docker
参考资料:
4. 安装/部署/运行 MinerU
下载仓库:
git clone https://github.com/opendatalab/MinerU.git
构建镜像:
cd MinerU/docker/china
mkdir -p ~/mineru/pdfs
mkdir -p ~/mineru/output
cp ../../demo/pdfs/demo1.pdf ~/mineru/pdfs/
docker run --rm --gpus=all -v ~/mineru/pdfs:/data/pdfs -v ~/mineru/output:/data/output mineru:latest mineru -p /data/pdfs/demo1.pdf -o /data/output
其中:
-
-v ~/mineru/pdfs:/data/pdfs将本地的pdfs目录挂载到容器的/data/pdfs目录,-v ~/mineru/output:/data/output将本地的output目录挂载到容器的/data/output目录。 -
mineru -p /data/pdfs/demo1.pdf -o /data/output是在容器中运行MinerU命令,指定输入pdf文件和输出目录。 -
-p、-o两个参数,表示运行一次MinerU,处理一个pdf文件,输出结果到指定目录。随后就退出了,导致docker容器也随之退出。 -
--gpus=all去掉这个参数,则使用CPU进行计算,速度会非常慢。 - 使用
docker images命令可以查看本地的docker镜像列表,确认是否成功构建了mineru:latest镜像。
MinerU的另外一种方式:
docker run -it --name mineru --gpus=all mineru:latest /bin/bash
这种方式,会在容器中启动一个交互式的bash终端,用户可以在这个终端中执行MinerU命令,处理多个pdf文件,输出结果到指定目录。用户可以在这个交互式终端中执行多次MinerU命令,处理多个pdf文件,输出结果到指定目录。用户处理完成之后,可以输入exit命令退出交互式终端,随之docker容器也会退出。
MinerU还提供web方式访问,使用Gradio Web进行部署,见参考博客。
- MinerU 安装部署完全指南:CPU、GPU、Docker 保姆级教程:参考 五、Docker 部署
使用如上命令运行docker+MinerU,构建镜像的Dockerfile文件中,是使用pip安装的方式安装MinerU的依赖包,与本地代码没有关系,即不会部署本地代码。
4.1. Docker compose 服务
在生产环境下,使用docker compose部署服务会更方便,运行命令如下:
# CDN加速下载compose.yaml文件,避免下载失败
# compose.yml文件中,是使能了GPU的配置
wget https://gcore.jsdelivr.net/gh/opendatalab/MinerU@master/docker/compose.yaml
# 运行命令,启动服务。docker在后台运行,使用`-d`参数
docker compose -f compose.yaml --profile api up -d
# 验证服务是否就绪
curl http://localhost:8000/health
# 停止并移除容器(推荐)
docker compose -f compose.yaml --profile api down
# 只停止不删除容器
docker compose -f compose.yaml --profile api stop
其他关联命令用法:
# 查看容器状态
docker compose -f compose.yaml --profile api ps
# 查看日志
docker logs -f mineru-api
docker logs -f -t mineru-api # 带时间戳的日志
# 查看日志,另外一种方式
docker compose -f compose.yaml --profile api logs -f # 实时日志
docker compose -f compose.yaml --profile api logs --tail=100 # 查看最近100行日志
MinerU服务的所有配置,都在compose.yaml文件中,如端口、镜像名称等等。
MinerU启动之后,在OpenMAIC的配置文件
.env.local中,将MINERU_API_URL=http://localhost:8000,即可使用本地部署的MinerU服务。
有关MinerU后端参数,见MinerU仓库的issue:使用docker compose启动mineru-api,如何选择hybrid-auto-engine和vlm-auto-engine。
MinerU不能很好的识别pdf中的目录结构,转换得到的markdown文件,目录似乎会都识别成二级目录##。需要借助LLM进行辅助识别,可以使用本地部署Ollama,或者第三方LLM(付费,需要API Key)。见MinerU代码仓库的Discussions:5003、4413。
4.2. MinerU 环境变量
部分实用可配置的 MinerU 环境变量:
# 限制单卡GPU显存
export MINERU_VIRTUAL_VRAM_SIZE=8
# 使用modelscope源加速国内下载,默认HuggingFace
# 官方文档:https://opendatalab.github.io/MinerU/zh/usage/model_source/
export MINERU_MODEL_SOURCE=modelscope
# 指定使用pipeline后端
#export MINERU_BACKEND=pipeline
4.3. MinerU 测试
如下测试命令,将 MinerU 返回的json结果保存到mineru_response.json文件中,并将响应头保存到mineru_headers.txt文件中:
curl.exe -F "files=@E:\义务教育教科书·物理八年级全一册.pdf" -F "parse_method=auto" -F "backend=hybrid-auto-engine" -F "return_content_list=true" -F "return_images=true" http://172.22.191.184:8000/file_parse -o mineru_response.json --max-time 1800 -D mineru_headers.txt -sS
4.4. 部分资料
5. 本地部署 QWen TTS
TODO
5.1. 资料
- MOSS-TTS:MOSS-TTS主打高保真,相对QWen TTS,Voice Clone时间比较长(QWen TTS似乎限制3秒),但QWen TTS时延小(<96ms)。另外,MOSS-TTS nano版本占用资源很小,可以在CPU上运行。
6. 部署及使用 OpenMAIC
docker部署、运行命令,以及清理命令如下:
# 在OpenMAIC代码目录中
docker build --no-cache -t openmaic .
# docker build --no-cache --build-arg APK_MIRROR=mirrors.aliyun.com --build-arg NPM_REGISTRY=https://registry.npmmirror.com -t openmaic .
docker run --rm -p 3000:3000 --env-file .env.local openmaic
docker stop $(docker ps -q --filter "ancestor=openmaic") 2>/dev/null
docker rm $(docker ps -aq --filter "ancestor=openmaic") 2>/dev/null
# 清理所有项目的 BuildKit 缓存
docker builder prune -f
.env.local配置文件基于.env.example修改如下:
# 本地部署的MinerU服务地址,远程则还需要远程地址及API Key
PDF_MINERU_BASE_URL=http://172.22.191.184:8000
# PR提交的新增的参数,设置OpenMAIC等待MinerU的时间,单位秒,默认5分钟
MINERU_TIMEOUT_MS=1800000
# 使用DeepSeek模型,配置API Key
DEEPSEEK_API_KEY=<....>
DEEPSEEK_BASE_URL=
# Example: deepseek-v4-pro,deepseek-v4-flash
DEEPSEEK_MODELS=deepseek-v4-pro
# web search引擎的API Key
TAVILY_API_KEY=<....>
# 配置Porxy
HTTP_PROXY=http://192.168.11.139:7890
HTTPS_PROXY=http://192.168.11.139:7890
# 允许局域网访问,如localhost,192.168.x.x等
ALLOW_LOCAL_NETWORKS=true
6.1. 平台链接
Enjoy Reading This Article?
Here are some more articles you might like to read next: