多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Ludwig 官方 Docker 镜像完全指南:CPU/GPU/Ray 四类镜像的构建、发布与容器化实战

Ludwig 官方 Docker 镜像完全指南:CPU/GPU/Ray 四类镜像的构建、发布与容器化实战 人工智能深度学习大模型微调LoRAAutoML【免费下载链接】ludwigLow-code framework for building custom LLMs, neural networks, and other AI models项目地址https://gitcode.com/gh_mirrors/lu/ludwig点击查看免费下载Ludwig 是一个无需编写代码即可训练与评估深度学习模型包括自定义 LLM、神经网络与其他 AI 模型的低代码框架。本文以 docker/README.md 为骨架结合仓库内四份 Dockerfile、build_and_push.sh 发布脚本与 .github/workflows/docker.yml CI 配置系统讲解 Ludwig 官方 Docker 镜像的变体差异、Tag 约定、容器运行方式CLI / Python API / TensorBoard、镜像发布流程与 Devcontainer 开发环境。读完本文你将掌握如何用ludwigai/ludwig系列镜像在本机拉起训练实验、通过 API 编程方式运行模型、可视化训练结果并理解镜像从源码到 Docker Hub 的完整发布链路。镜像提供的能力与定位Ludwig Docker 镜像内置了运行 Ludwig 所需的完整依赖集合开箱即用地支持以下核心能力文本特征text features图像特征image features音频特征audio features可视化visualizations超参数优化hyperparameter optimization分布式训练distributed training模型服务model serving这些能力对应的底层依赖如音频编解码库libsndfile1、ffmpeg、sox编译工具链build-essential、cmake等在镜像构建阶段即被安装完毕用户无需关心依赖冲突与安装细节。镜像的构建产物是一个包含完整预置依赖的、可直接执行的 Ludwig 运行环境。四个官方镜像变体镜像从项目master分支构建共分四个仓库变体对应 docker/ 目录下的四个子目录镜像仓库Dockerfile 路径基础镜像用途ludwigai/ludwigdocker/ludwig/Dockerfilepython:3.12-slim搭载 CPU 版 PyTorch 的标准镜像ludwigai/ludwig-gpudocker/ludwig-gpu/Dockerfilenvidia/cuda:12.6.3-cudnn-devel-ubuntu24.04搭载 GPU 版 PyTorch 的镜像ludwigai/ludwig-raydocker/ludwig-ray/Dockerfilerayproject/ray:2.54.0-py312集成 Ray 2.x 与 CPU 版 PyTorch支持分布式训练ludwigai/ludwig-ray-gpudocker/ludwig-ray-gpu/Dockerfilerayproject/ray:2.54.0-py312-cu126集成 Ray 2.x 与 GPU 版 PyTorch说明README 中记载的 Ray 版本为 2.3.1而当前仓库的 Dockerfile 实际基于rayproject/ray:2.54.0-py312/2.54.0-py312-cu126构建见 docker/ludwig-ray/Dockerfile 与 docker/ludwig-ray-gpu/Dockerfile具体以仓库当前状态为准。各变体 Dockerfile 的构建细节从 docker/ludwig/Dockerfile 可以还原标准镜像的构建步骤基于python:3.12-slim通过apt-get安装git、libsndfile1、build-essential、g、cmake、ffmpeg、sox、libsox-dev—— 其中libsndfile1/ffmpeg/sox支撑音频特征的读取与处理编译工具链则服务于部分依赖的源码构建。通过构建参数ARG LUDWIG_VERSION控制安装来源指定了版本时pip install ludwig[full]${LUDWIG_VERSION}从 PyPI 安装对应发布版未指定时pip install .[full]基于仓库源码安装二者均通过--extra-index-url https://download.pytorch.org/whl/cpu拉取 CPU 版 PyTorch。强制重装固定版本的 CPU 版 PyTorch 三件套torch2.12.0、torchvision0.27.0、torchaudio2.11.0保证镜像内框架版本一致。将工作目录切换为/data并将入口命令设为ENTRYPOINT [ludwig]。GPU 变体 docker/ludwig-gpu/Dockerfile 的差异在于基础镜像换为 CUDA 12.6.3 的 devel 版创建独立 venv/opt/ludwig-venv并写入PATHPyTorch 从cu126索引安装。Ray 变体则直接复用 Ray 官方镜像作为基础额外安装wget、curl、rsync、vim、tzdata等运维常用工具。值得注意的实现细节CPU/GPU 两个基础变体在 Dockerfile 末尾显式设置了ENTRYPOINT [ludwig]因此容器启动即进入 Ludwig CLI而两个 Ray 变体并未覆盖ENTRYPOINT从源码结构看它们保留 Ray 基础镜像的默认入口运行时需要显式指定要执行的命令。镜像 Tag 约定ludwigai系列镜像使用以下三类 Tagmaster—— 由 Ludwig 的master分支构建的最新镜像nightly—— Ludwig 软件的每日构建版本sha-commit—— 对应 Ludwig 在指定 git commit7 位 SHA1 前缀处的软件版本便于回溯到任意历史提交点。此外发布流程还会按语义化版本生成x.y.z完整版本号、x.y次版本号如0.14.0与0.14以及可选的latest标签详见下文发布章节。运行容器三种典型用法官方文档给出了以ludwigai/ludwig:master为示例的三种运行方式。假设宿主机目录结构如下/top/level/directory/path/ data/ train.csv src/ config.yaml ludwig_api_program.py目录挂载的核心思想是将宿主机的data目录映射到容器内/data数据集所在位置将src目录映射到容器内/src配置与脚本所在位置从而让容器内外共享训练数据与产物。方式一运行 Ludwig CLI# 设置宿主目录变量 parent_path/top/level/directory/path # 执行 ludwig cli挂载数据目录与源码目录 docker run -v ${parent_path}/data:/data \ -v ${parent_path}/src:/src \ ludwigai/ludwig:master \ experiment --config /src/config.yaml \ --dataset /data/train.csv \ --output_directory /src/resultsexperiment是 Ludwig CLI 的核心子命令之一用于“训练模型并评估其性能”。从 ludwig/cli.py 的命令清单可见CLI 还提供train、predict、evaluate、forecast、hyperopt、serve、visualize、inspect、export_model、generate_config、init_config、check_install等子命令均可按同样方式在容器中调用。实验产物模型权重、日志、评估报告等会写入/src/results由于该目录已挂载回宿主机最终可在宿主机/top/level/directory/path/src/results下查看结果。方式二运行使用 Ludwig API 的 Python 程序parent_path/top/level/directory/path docker run -v ${parent_path}/data:/data \ -v ${parent_path}/src:/src \ -w /src \ --entrypoint python \ ludwigai/ludwig:master /src/ludwig_api_program.py关键差异在于-w /src将容器当前工作目录设为/src使程序内相对路径与宿主机脚本保持一致--entrypoint python覆盖镜像默认入口ludwig改为启动 Python 解释器脚本路径/src/ludwig_api_program.py作为参数传入。这样即可在容器内以编程方式调用 Ludwig 的训练、预测、评估等 API。程序运行产生的 Ludwig 结果同样位于宿主机/top/level/directory/path/src/results。方式三用 TensorBoard 查看训练结果parent_path/top/level/directory/path docker run -v ${parent_path}/src:/src \ -p 6006:6006 \ --entrypoint tensorboard \ ludwigai/ludwig:master \ --logdir /src/results/experiment_run/model/logs \ --bind_all此处再次覆盖入口为tensorboard并通过-p 6006:6006将容器端口映射到宿主机。--logdir指向容器内 TensorBoard 日志目录对应宿主机/top/level/directory/path/src/results/experiment_run/model/logs--bind_all使 TensorBoard 监听容器的全部公共接口。随后在浏览器访问http://localhost:6006即可看到训练指标仪表盘。镜像的发布流程CI 自动发布镜像在正常情况下由 CI 自动发布。查看 .github/workflows/docker.yml 可以还原完整发布链路触发条件推送v*.*.*格式的 release tag或通过workflow_dispatch手动触发可填写ludwig_version指定要安装的 PyPI 版本并用latest布尔输入决定是否额外打latest标签构建矩阵对ludwig、ludwig-gpu、ludwig-ray、ludwig-ray-gpu四个镜像并行构建标签生成基于docker/metadata-action版本化触发时生成版本、主.次、可选的latest标签tag 推送时则用semver模式从 git ref 派生{{version}}与{{major}}.{{minor}}构建与推送配置 QEMU 与 Docker Buildx 支持多架构构建登录 Docker Hub 后通过docker/build-push-action以./docker/变体/Dockerfile为构建文件、以仓库根目录为 context 构建并推送同时透传LUDWIG_VERSION构建参数。完整的发布流程说明见 RELEASES.md。手动发布与版本回填若需要手动发布或回填某个历史版本可使用仓库内的 docker/build_and_push.sh 脚本# 前置要求已 docker login 至 ludwigai 的 Docker Hub 账号 ./docker/build_and_push.sh version [--latest] # 示例发布新的 latest 版本 ./docker/build_and_push.sh 0.14.0 --latest # 示例回填旧版本但不更新 :latest ./docker/build_and_push.sh 0.13.0从脚本源码看其行为包括由完整版本号自动推导次版本号0.14.0→0.14依次遍历四个镜像变体执行docker build与docker push构建时通过--build-arg LUDWIG_VERSION版本传入版本参数对应 Dockerfile 中的ARG LUDWIG_VERSION使镜像从 PyPI 安装指定版本的ludwig[full]默认打版本与主.次两个标签追加--latest时额外打latest标签。脚本还通过set -euo pipefail保证任一环节失败即整体退出避免部分镜像发布不完整。Devcontainer容器化开发环境如果你想为 Ludwig 贡献代码可以使用 Devcontainer 在容器内搭建包含全部依赖的完整开发环境VS Code 的 Dev Containers 扩展会自动读取配置并启动容器。配置位于仓库根目录的 .devcontainer/devcontainer.json 与 .devcontainer/Dockerfile。从配置内容可见该开发容器以仓库根目录为构建 context预置了 Python 插件ms-python.python、ms-python.vscode-pylance与 Ruff 代码检查扩展并在容器创建后自动执行pip install --user -e .[test]以可编辑模式安装 Ludwig 及其测试依赖使开发者可以在与官方镜像一致的依赖环境中直接编写、运行和测试代码。使用注意事项小结挂载与产物务必按“数据目录 →/data、代码/配置目录 →/src”的约定挂载容器内所有输出写到挂载目录才能在宿主机访问入口命令基础镜像默认入口是ludwig运行 Python 脚本或 TensorBoard 等工具时需用--entrypoint覆盖GPU 镜像ludwig-gpu与ludwig-ray-gpu面向 NVIDIA GPU 场景CUDA 12.6运行时需要宿主机具备 NVIDIA 容器运行时如--gpus all支持Ray 变体集成 Ray 的镜像适合分布式训练与 Ray 生态场景且未覆盖默认入口调用方式与基础镜像略有不同版本一致性镜像内 PyTorch 固定为2.12.0/torchvision 0.27.0/torchaudio 2.11.0若需要其他框架版本应基于对应变体的 Dockerfile 自行定制构建。赞分享人工智能深度学习大模型微调LoRAAutoML【免费下载链接】ludwigLow-code framework for building custom LLMs, neural networks, and other AI models项目地址https://gitcode.com/gh_mirrors/lu/ludwig点击查看免费下载相关推荐face_recognition 官方 Docker 镜像全解析CPU/GPU/Jupyter 镜像的构建、部署与实战指南face_recognition 官方 Docker 镜像全解析CPU/GPU/Jupyter 镜像的构建、部署与实战指南 本篇技术指南围绕 face_rec人工智能计算机视觉深度学习Apache Kafka 官方 Docker 镜像构建、测试、发布与官方镜像交付全指南Apache Kafka 官方 Docker 镜像构建、测试、发布与官方镜像交付全指南 本篇技术指南以 Apache Kafka 仓库中 docker/REA后端消息队列流处理大数据Cilium 容器镜像构建实战从开发镜像到官方发布镜像的完整机制解析Cilium 容器镜像构建实战从开发镜像到官方发布镜像的完整机制解析 本文围绕 Cilium 官方开发文档《Building Container Images云原生网络服务网格可观测性网络安全eBPF上一篇如何快速掌握Qiling框架从入门到精通的完整API指南下一篇VSS报告生成进阶HITL人工审核流程如何微调Prompt让报告更精准创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表