使用 Docker
如果在 Windows 下的 WSL2 中运行 Docker,推理可能会随机崩溃。
当 Docker 安装在 Windows 上时,如果可用,默认情况下它将使用 WSL2。 WSL2 仅使用最多 50% 的可用内存,这并不总是足够的。为了解决这个问题,您可以创建一个.wslconfig 文件来更改这个设置
# Place this file into /users/<username>
# Settings apply across all Linux distros running on WSL 2
[wsl2]
# Limits VM memory to use no more than 12 GB, this can be set as whole numbers
# using GB or MB. The default is 50% of available RAM and 8GB isn't (currently)
# enough for CodeProject AI Server GPU
memory=12GB
# Sets amount of swap storage space to 8GB, default is 25% of available RAM
swap=8GB
TF-Lite 安装在 Docker 上挂起
如果您在 Linux 系统上运行 Docker,并且看到以下错误
objectdetection_tflite_adapter.py: ModuleNotFoundError: No module named 'cv2'
Module ObjectDetectionTFLite has shutdown
这是一个超时。 从 CodeProject.AI Server 2.1.9 开始,我们添加了在 appsettings.json 中调整 ModuleInstallTimeout
值的能力。 为了编辑 appsettings.json,您需要从命令行更新该文件。
首先,您需要 CodeProject.AI 服务器 Docker 容器的容器 ID。 从命令行输入 docker ps -a
。
容器 ID 在 CONTAINER ID 列下。 对我来说,这是 fbcdef25436d
。 现在我们有了容器 ID,我们需要从命令行访问该容器。 为此,我们输入 docker exec -u 0 -it containerID bash
。
接下来,我们需要安装一个文本编辑器来编辑 appsettings.json 文件。 在我们这样做之前,我们必须输入 apt-get update
以确保我们拥有最新的软件包。 我正在安装 nano,但如果您愿意,也可以安装 vim。 要安装 nano,请输入 apt-get install nano
。
nano 完成安装后,您可以使用它来编辑 appsettings.json 文件。 输入 nano appsettings.json
。 很难看到 ModuleInstallTimeout
在哪里,所以按 Ctrl 和“W”来搜索文件,然后输入“where-is-moduleinstalltimeout”。
找到 ModuleInstallTimeout
后,您可以编辑时间长度。 默认值为 20 分钟,这应该足够了,但如果由于互联网问题而超时,或者在 Raspberry Pi 上速度较慢,您可能需要将其加倍。 编辑完数字后,按 Ctrl + X,然后按“Y”表示您要保存修改后的缓冲区,然后按 Enter。
您需要重新启动 Pi(如果您使用的是 Pi)或重新启动容器才能使更改生效。
来自守护程序的错误响应:无效模式:/etc/codeproject/ai。
如果您在 Windows 中,请确保从 Windows Powershell 或终端运行 Docker,而不是从 WSL 终端运行。
使用映射在 Docker 中安装时,模块无法运行
在 Docker 容器中安装 CodeProject.AI 服务器并将您的模块映射到特定文件夹时,您可能会收到如下错误
这是一个超时。 从 CodeProject.AI Server 2.1.9 开始,我们添加了在 appsettings.json 中调整 ModuleInstallTimeout
值的能力。 为了编辑 appsettings.json,请转到 Visual Studio Code。 在“扩展”选项卡中,搜索“Docker”,如果尚未安装,请将 Docker 扩展安装到 Visual Studio Code。
然后,从 Visual Studio Code 左侧的 Docker 图标中,查看“容器”->“app”->“server”下,然后找到 appsettings.json。 选择该文件,然后单击“打开”图标。 然后导航到 ModuleInstallTimeout
。
// The time allowed for a module to be installed. 20 mins should be plenty, but for a Raspberry
// Pi, or slow internet, it will need longer.
"ModuleInstallTimeout": "00:20:00",
默认值为 20 分钟,这应该足够了,但如果由于互联网问题而超时,您可能需要将其加倍。 编辑完数字后,按 Ctrl + S 保存。
您有一张 NVidia 显卡,但在 Docker 下运行时,CodeProject.AI 服务器仪表板中未报告 GPU/CUDA 利用率
请确保使用 --gpus all
参数启动 Docker 镜像
带有卷的 Docker:重新安装预安装的模块并启动新的容器会导致模块同时存在于两个模块目录中
如果您创建一个 Docker 容器,并将卷映射到 * /app/moduels * 目录,则对该目录的更改会跨容器重新启动和更新保存在卷中。因此,当您卸载预安装的模块时,它会从 pre_installed 目录中删除。 重新安装会将其添加到模块目录。
例如,如果您使用具有以下 docker-compose.yml 的 Docker Compose
version: '3'
services:
CodeProjectAI:
image: codeproject/ai-server
container_name: "CodeProjectAI"
ports:
- "32168:32168"
environment:
- TZ=America/Toronto
volumes:
- cpaidata:/etc/codeproject/ai
- cpaimodules:/app/modules
restart: unless-stopped
volumes:
cpaidata:
cpaimodules:

然后卸载一个预安装的模块,例如面部处理或对象检测 (YOLOv5.6.2),然后重新安装它,然后删除该容器并从同一个镜像重新启动它,或者升级 CodeProject.AI 服务器,预安装的模块将移动到模块目录。
最终,虽然有点混乱,但如果新安装的模块与 docker 容器的服务兼容,则这不是问题。