在 Docker 中运行 CodeProject.AI 服务器
Docker 是一种技术,它允许您将应用程序、库、驱动程序、运行时、文件以及您的应用程序可能需要的任何其他东西打包到一个可部署的镜像中,该镜像可以在任何地方运行 Docker 的地方运行。几乎无处不在。优点是您无需担心安装驱动程序或包或出现版本冲突:运行所需的一切都在容器中,随时可用。
要在 Docker 中运行 CodeProject.AI 服务器,您需要 下载并安装 Docker Desktop。这将安装运行时和桌面管理器。
CodeProject.AI 服务器镜像
- codeproject/ai-server 适用于 x64 系统的基本仅 CPU 服务器
- codeproject/ai-server:cuda11_7 适用于 x64 系统的启用 GPU(NVIDIA CUDA 11.7)的版本。此镜像也可在非 GPU 系统上运行。
- codeproject/ai-server:cuda12_2 适用于 x64 系统的启用 GPU(NVIDIA CUDA 12.2)的版本。此镜像也可在非 GPU 系统上运行。
- codeproject/ai-server:arm64 为 Arm64 芯片组(如 Raspberry Pi 或 Apple Silicon 设备)构建的镜像。
- codeproject/ai-server:rpi64 专为 Raspberry Pi Arm64 设备设计的版本。其中包含适用于低资源系统的对象检测模块。
运行 Docker 容器
主要有两种方式来启动 Docker 容器:命令行或使用 Docker Desktop。
在容器中运行 Docker 镜像时,您还有另外两个选择
- 将设置和可下载模块直接保存在 Docker 容器中。每次重启容器时,这些设置都会保留。如果更新 Docker 镜像和容器,您将丢失更改。
- 将设置和可下载模块保存在 Docker 容器外部的文件夹中。这允许您更新 Docker 镜像和容器,并保留所有已保存的模块和设置。
简单的 Docker 启动(设置保存在容器中)
在这种情况下,我们只需要映射使用的端口并选择正确的镜像。
如果您运行的是 Windows on Arm,请使用 codeproject/ai-server:arm64
而不是 codeproject/ai-server
如果您运行的是 Linux on Arm,请使用 codeproject/ai-server:arm64
而不是 codeproject/ai-server
高级 Docker 启动(设置保存在容器外部)
我们需要将 Docker 镜像中的两个文件夹映射到主机文件系统,以便将设置保留在容器外部,并允许下载和安装模块。这确保了当您升级 Docker 镜像时,您已经下载的设置和模块仍然存在。
这两个文件夹是
- 设置文件夹(Docker 镜像中的 /etc/codeproject/ai)
- 模块下载文件夹(Docker 镜像中的 /app/modules)
请注意,我们根据最佳实践在每个操作系统中使用不同的文件夹。Linux 使用 /etc
和 /opt
文件夹,Windows 使用 ProgramData
,macOS 使用 Library\Application Support
。
docker run --name CodeProject.AI -d -p 32168:32168 ^
--mount type=bind,source=C:\ProgramData\CodeProject\AI\docker\data,target=/etc/codeproject/ai ^
--mount type=bind,source=C:\ProgramData\CodeProject\AI\docker\modules,target=/app/modules ^
codeproject/ai-server
如果您运行的是 Windows on Arm,请使用 codeproject/ai-server:arm64
而不是 codeproject/ai-server
docker run --name CodeProject.AI -d -p 32168:32168 \
--mount type=bind,source=/etc/codeproject/ai,target=/etc/codeproject/ai \
--mount type=bind,source=/opt/codeproject/ai,target=/app/modules \
codeproject/ai-server
如果您运行的是 Linux on Arm,请使用 codeproject/ai-server:arm64
而不是 codeproject/ai-server
docker run --name CodeProject.AI -d -p 32168:32168 \
--mount type=bind,source=/etc/codeproject/ai,target=/etc/codeproject/ai \
--mount type=bind,source=/opt/codeproject/ai,target=/app/modules \
--privileged -v /dev/bus/usb:/dev/bus/usb
codeproject/ai-server:rpi64
对于拥有 Coral.AI Edge TPU 等 USB 设备的用户,包含 --privileged -v /dev/bus/usb:/dev/bus/usb 标志将提供对 Coral 硬件的访问。
docker run --name CodeProject.AI -d -p 32168:32168 \
--mount type=bind,source='/Library/Application Support/CodeProject/AI/docker/data',target=/etc/codeproject/ai \
--mount type=bind,source='/Library/Application Support/CodeProject/AI/docker/modules',target=/app/modules \
codeproject/ai-server
macOS 中的文件共享
默认情况下,macOS 仅允许挂载到 /tmp、/Users/Volumes/private 和 /var/folders。为了将绑定挂载到 /Library/Application Support 文件夹,您需要进入 Docker 设置并添加此文件夹。
docker run --name CodeProject.AI -d -p 32168:32168 \
--mount type=bind,source='/Library/Application Support/CodeProject/AI/docker/data',target=/etc/codeproject/ai \
--mount type=bind,source='/Library/Application Support/CodeProject/AI/docker/modules',target=/app/modules \
codeproject/ai-server:arm64
macOS 中的文件共享
默认情况下,macOS 仅允许挂载到 /tmp、/Users/Volumes/private 和 /var/folders。为了将绑定挂载到 /Library/Application Support 文件夹,您需要进入 Docker 设置并添加此文件夹。
使用启用 GPU 的镜像
Docker GPU 版本特定于计算能力 >= 6.0 的 NVIDIA CUDA 启用卡。为了确保 Docker 镜像能够访问 GPU 硬件,您需要使用 --gpus all
标志,并拉取 codeproject/ai-server:cuda11_7 镜像。
请注意,目前没有 Arm64 GPU 启用的构建。
Docker GPU 版本仅在 Windows 和 Ubuntu 下运行。macOS 不再支持 NVIDIA 硬件。
开始使用 Docker Desktop
要启动使用 Docker Desktop 的镜像,您首先需要从 Docker Hub 拉取镜像。在命令行终端运行 docker pull codeproject/ai-server
以获取 CodeProject.AI Docker 镜像的最新版本,或使用 上面列出的其中一个镜像名称。您可以通过 Docker Desktop 使用该镜像启动容器。
在“镜像”选项卡中,选择要运行的镜像,单击“运行”按钮,然后单击“可选设置”。
设置以下属性
- 端口:32168(如果您使用的是期望端口 5000 的旧版本,则为 5000)
- 卷(如果您希望将设置保留在容器外部)
- 主机卷 C:\ProgramData\CodeProject\AI\docker\data 映射到容器路径 /etc/codeproject/ai
- 主机卷 C:\ProgramData\CodeProject\AI\docker\modules 映射到容器路径 /app/modules
- 端口:32168(如果您使用的是期望端口 5000 的旧版本,则为 5000)
- 卷(如果您希望将设置保留在容器外部)
- 主机卷 /etc/codeproject/ai 映射到容器路径 /etc/codeproject/ai
- 主机卷 /opt/codeproject/ai 映射到容器路径 /app/modules
- 端口:32168(如果您使用的是期望端口 5500 的旧版本,则为 5500)
- 卷(如果您希望将设置保留在容器外部)
- 主机卷 /Library/Application Support/CodeProject/AI/docker/data 映射到容器路径 /etc/codeproject/ai
- 主机卷 /Library/Application Support/CodeProject/AI/docker/modules 映射到容器路径 /app/modules
您还可以提供一个可选名称。请确保不要包含空格。Docker Desktop 很挑剔。
单击“运行”,您就完成了。
Docker Compose
以下是一些基本的 docker compose 文件,供您入门。
version: "3.9"
services:
CodeProjectAI:
image: codeproject/ai-server:cuda11_7
container_name: codeproject-ai-server-cuda
hostname: codeproject-ai-server
restart: unless-stopped
ports:
- "32168:32168"
environment:
- TZ=America/Toronto
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
这是一个在 Windows 上使用 docker compose 文件的示例。打开记事本。将上面的命令行复制并粘贴到记事本中。然后将文件保存为 .yml,而不是 .txt,并记住您保存的位置。
打开命令行。导航到您保存 .yml 文件的文件夹,然后键入
``` batch title='Command line'
docker compose docker-compose.yml up
```
其中 docker-compose.yml 是您的 .yml 文件名。
如果您想使用允许您添加自定义模型的 docker compose 文件,请对您的 docker compose 文件进行以下添加
```yaml
version: "3.9"
services:
CodeProjectAI:
image: codeproject/ai-server
container_name: codeproject-ai-server-cpu
hostname: codeproject-ai-server
restart: unless-stopped
ports:
- "32168:32168"
environment:
- TZ=America/Toronto
volumes:
- codeproject_ai_data:/etc/codeproject/ai
- codeproject_ai_modules:/app/modules
volumes:
codeproject_ai_data:
codeproject_ai_modules:
```
然后打开命令行并键入
``` batch title='Command line'
docker compose docker-compose.yml up
```
打开 Docker Desktop 并选择“容器”选项卡,然后单击容器名称
这将打开容器。有许多选项卡可以让您了解容器的信息。单击“文件”选项卡。在这里,您可以根据它们映射到容器文件系统的目录来添加/删除卷中的文件。
您可以导航到 custom-models 目录,然后将自定义模型拖放到文件夹名称上。
更改服务器设置
要更改在 Docker 容器中运行的 CodeProject.AI 服务器实例的设置,您主要有两种选择
常见示例:为 ObjectDetectionYolo 模块指定自定义对象检测文件文件夹
对象检测(YOLO)模块提供了指定包含自定义模型的文件夹的功能。要在 Docker 中访问此功能,只需将 Docker 实例内的文件夹映射到主机操作系统上的文件夹。
该模块预装在大多数 Docker 镜像中(Raspberry Pi 和 Jetson Docker 镜像除外)。预装模块位于 /app/preinstalled-modules,而不是 /app/modules。这允许您通过映射到 /modules 文件夹来下载、安装和持久化模块,同时仍然拥有可用的预装模块。
假设我们的自定义模型位于 C:\my-custom-models
文件夹中。要将其映射到 Docker 实例中的 custom-models 文件夹,您将像这样启动镜像
docker run --name CodeProject.AI -d -p 32168:32168 ^
--mount type=bind,source=C:\ProgramData\CodeProject\AI\docker\data,target=/etc/codeproject/ai ^
--mount type=bind,source=C:\ProgramData\CodeProject\AI\docker\modules,target=/app/modules ^
--mount type=bind,source=C:\my-custom-models,target=/app/preinstalled-modules/ObjectDetectionYolo/custom-models,readonly ^
codeproject/ai-server
访问 CodeProject.AI 服务器仪表板。
打开浏览器并导航到 https://:32168 以打开 CodeProject.AI 仪表板。这将为您提供服务器操作的详细信息。
探索服务器中运行的模块
我们提供了一个用 HTML 和 JavaScript 编写的示例应用程序,可执行各种 AI 操作。在浏览器中打开 https://:32168/vision.html。仪表板底部也有一个链接。
向 Docker 容器添加新模块
从 1.6.8 版本开始,现在可以将模块添加到主机服务器并在 Docker 容器中运行它们。CodeProject.AI Server 的 2.0 版本进一步扩展了这一功能,允许通过仪表板在运行时下载和安装模块。
在我们上面关于启动 Docker 镜像的讨论中,我们包含了将 /app/modules 文件夹(在 Docker 镜像中)映射到主机文件系统中的文件夹(例如 C:\ProgramData\CodeProject\AI\docker\modules)。这样做可以让 CodeProject.AI Server 有机会下载、安装和存储将在 Docker 容器重启后仍然存在的模块。
它还提供了向现有 Docker 容器添加新模块的方法。
-
按照上面的说明启动您的 Docker 容器。Docker 容器中下载的模块存储在 /app/modules 中。在 Windows 中,您可能将其映射到 C:\ProgramData\CodeProject\AI\docker\modules。在 Linux 中,您可能将其映射到 /opt/codeproject/ai,在 macOS 中,则映射到 /Library/Application Support/CodeProject/AI/docker/modules。
-
将新模块的文件夹复制到主机上的映射的 /app/modules 文件夹中(例如,在 Windows 中为 C:\ProgramData\CodeProject\AI\docker\modules)。
-
确保模块的 modulesettings.json 设置文件中
RuntimeLocation
设置为“Local”。 -
确保您的模块有一个 install.sh 脚本,位于模块的文件夹中。任何对 'setupPython' 或 'installPythonPackages' 的调用都应将安装位置指定为“Local”。
-
打开到您的 Docker 容器的终端。Docker Desktop 提供了一个方便的 GUI 来执行此操作。转到 /app/modules/[your module folder] 并执行
这将在 Docker 容器内部运行您的新模块的设置脚本,确保该模块为容器的操作系统正确设置。
下次启动 Docker 容器时,此模块将被发现并与其余模块一起启动。