news 2026/7/11 10:41:15

在 Apple M5 MacBook Pro 上搭建 YOLO 训练环境:从 PyTorch MPS 到首次训练完整实录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 Apple M5 MacBook Pro 上搭建 YOLO 训练环境:从 PyTorch MPS 到首次训练完整实录

一、背景

最近开始尝试在 Apple M5 MacBook Pro 上进行 YOLO 模型训练。

这台机器使用 Apple M5 芯片和统一内存架构,不支持 NVIDIA CUDA,但可以通过 PyTorch 的 MPS 后端调用 Apple GPU。因此,这次环境搭建的核心目标是:

  1. 使用 Conda 创建独立的 Python 环境;
  2. 安装支持 Apple Silicon 的 PyTorch;
  3. 验证 MPS 是否能够调用 M5 GPU;
  4. 安装 Ultralytics;
  5. 使用官方示例数据集完成一次 YOLO 冒烟训练;
  6. 安装 JupyterLab,方便后续编写训练代码。

本文完整记录实际执行过程,方便以后回查和重新搭建环境。


二、本次环境信息

本次实际安装完成后的主要环境如下:

项目版本或配置
操作系统macOS 26.5 arm64
芯片Apple M5
统一内存24GB
Conda26.3.2
Python3.11.15
PyTorch2.13.0
torchvision0.28.0
Ultralytics8.4.91
JupyterLab4.6.1
ipykernel7.3.0
GPU 加速后端MPS

Conda 创建环境时已经正确识别为osx-arm64,Python 环境最终安装在 Miniforge 的独立环境目录中。


三、创建独立的 YOLO 环境

首先检查 Conda 是否已经安装:

conda--version

本机输出:

conda 26.3.2

创建名为yolo的 Python 3.11 环境:

conda create-nyolopython=3.11-y

激活环境:

conda activate yolo

激活成功后,终端前面会出现:

(yolo)

检查当前 Python 是否为 Apple Silicon 原生架构:

python-c"import platform; print(platform.machine())"

输出:

arm64

继续检查 Python 的实际路径:

whichpython

本机输出:

/opt/homebrew/Caskroom/miniforge/base/envs/yolo/bin/python

这说明当前使用的是yolo环境中的 Python,而不是 macOS 系统自带的 Python。


四、安装 PyTorch

先更新 Python 包管理工具:

python-mpipinstall--upgradepip setuptools wheel

然后安装 PyTorch 和 torchvision:

python-mpipinstalltorch torchvision

本次实际安装的版本为:

torch 2.13.0 torchvision 0.28.0

安装的 wheel 文件明确带有macosxarm64标识,说明安装的是 Apple Silicon 原生版本,而不是通过 Rosetta 运行的 Intel 版本。

为了以后能够完全复现本次环境,也可以直接指定版本:

python-mpipinstalltorch==2.13.0torchvision==0.28.0

五、验证 Apple M5 GPU 和 MPS

安装 PyTorch 后,最关键的一步是确认 MPS 是否可用。

执行:

python -<<'PY' import platform import torch print("计算机架构:", platform.machine()) print("PyTorch版本:", torch.__version__) print("MPS已构建:", torch.backends.mps.is_built()) print("MPS可用:", torch.backends.mps.is_available()) if torch.backends.mps.is_available(): x = torch.rand(3, 3, device="mps") print("GPU张量设备:", x.device) print(x) else: print("当前未检测到可用的MPS设备") PY

本机输出的关键信息为:

计算机架构: arm64 PyTorch版本: 2.13.0 MPS已构建: True MPS可用: True GPU张量设备: mps:0

同时成功在mps:0设备上创建了一个随机张量。

这一步说明:

  • 当前 Python 是 ARM64 原生环境;
  • PyTorch 已经编译了 MPS 支持;
  • Apple M5 GPU 可以被 PyTorch 调用;
  • 后续 YOLO 训练可以使用device=mps

六、安装 Ultralytics

在安装之前,可以查看 PyPI 上可用的 Ultralytics 版本:

python-mpip index versions ultralytics

当时查询到的最新版本为:

8.4.91

本次实际使用以下命令安装:

python-mpipinstall-Uultralytics

为了避免以后重新安装时版本发生变化,更推荐明确指定版本:

python-mpipinstallultralytics==8.4.91

安装完成后执行环境检查:

yolo checks

检查结果显示:

Ultralytics 8.4.91 Python 3.11.15 torch 2.13.0 Apple M5 24GB RAM Setup complete

Ultralytics 及其依赖均安装成功。

为什么yolo checks显示 GPU 为 None

检查结果中还出现了:

GPU None CUDA None

这并不代表 Apple GPU 无法使用。

这里的 GPU 信息主要面向 CUDA 设备。Apple Silicon 不使用 CUDA,而是通过 MPS 调用 GPU。判断 Apple GPU 是否可用,应当看:

torch.backends.mps.is_available()

以及训练开始时是否显示:

MPS (Apple M5)

本次后续训练已经明确使用 MPS 成功运行,因此GPU None不影响实际训练。


七、Ultralytics 版本和 YOLO 模型版本不是一回事

这里很容易产生一个误解。

本次安装的是:

ultralytics 8.4.91

这表示 Python 软件包的版本。

而下面这些:

yolov8n.pt yolo11n.pt yolo26n.pt

表示不同的 YOLO 模型及模型权重。

因此,安装ultralytics==8.4.91并不意味着只能使用 YOLOv8。只要当前 Ultralytics 版本支持,就可以在同一个 Python 环境中保存并调用多个模型权重。

例如使用 YOLO11:

yolo detect train\model=yolo11n.pt\data=coco8.yaml\epochs=1\imgsz=640\batch=2\device=mps

本次实际冒烟测试使用的是yolo26n.pt,但环境搭建方式与使用 YOLO11 完全一致。


八、执行第一次 YOLO 冒烟训练

为了验证整套环境是否真正可用,使用 Ultralytics 官方提供的coco8小型数据集进行一次训练。

实际执行命令如下:

yolo detect train\model=yolo26n.pt\data=coco8.yaml\epochs=1\imgsz=640\batch=2\device=mps\workers=2

几个主要参数的含义:

model=yolo26n.pt 使用 Nano 轻量模型 data=coco8.yaml 使用官方小型测试数据集 epochs=1 只训练一轮,用于环境验证 imgsz=640 输入图片尺寸为 640×640 batch=2 每批处理两张图片 device=mps 使用 Apple GPU workers=2 设置数据加载进程数

第一次运行时,系统自动下载了:

yolo26n.pt coco8.zip

训练启动信息中明确显示:

Ultralytics 8.4.91 Python 3.11.15 torch 2.13.0 MPS (Apple M5)

这说明 YOLO 已经成功调用 Apple M5 GPU,而不是退回 CPU。


九、第一次训练结果

模型结构统计如下:

YOLO26n 260 layers 2,572,280 parameters 6.1 GFLOPs

训练数据集包含:

训练图片:4张 验证图片:4张 验证目标:17个

一轮训练正常完成,训练阶段大约耗时8秒。验证结果为:

Precision:0.889 Recall:0.661 mAP50:0.902 mAP50-95:0.668

这里的数据量非常小,指标没有实际项目价值。本次训练的目的只是验证:

  • 模型能够加载;
  • 数据集能够下载和解析;
  • 前向传播正常;
  • 反向传播正常;
  • MPS 可以参与训练;
  • 权重可以正常保存;
  • 验证流程可以完整执行。

最终结果保存在:

/opt/homebrew/runs/detect/train

主要文件包括:

/opt/homebrew/runs/detect/train/weights/best.pt /opt/homebrew/runs/detect/train/weights/last.pt /opt/homebrew/runs/detect/train/results.png /opt/homebrew/runs/detect/train/labels.jpg

日志显示best.ptlast.pt均已成功生成,说明完整训练链路已经跑通。


十、关于 MPS 的确定性警告

训练过程中出现了以下警告:

index_put_with_accumulate_mps does not have a deterministic implementation

这条信息的意思是:

当前训练开启了确定性算法,但 PyTorch 中某个 MPS 算子还没有完全确定性的实现。

这是一条警告,不是错误。本次训练在警告出现后仍然完成了反向传播、模型验证和权重保存,因此不会影响环境是否搭建成功。

若后续不要求每次训练结果严格复现,可以尝试:

yolo detect train\model=yolo11n.pt\data=data.yaml\device=mps\deterministic=False

对于正式实验,如果需要对比不同模型或超参数,仍建议固定随机种子,并记录完整训练配置。


十一、安装 JupyterLab

为了方便后续通过 Notebook 编写代码,继续安装 JupyterLab 和 ipykernel:

python-mpipinstalljupyterlab ipykernel

本次安装的主要版本为:

jupyterlab 4.6.1 ipykernel 7.3.0

把当前 Conda 环境注册为 Jupyter 内核:

python-mipykernelinstall\--user\--nameyolo\--display-name"Python 3.11 - YOLO MPS"

安装成功后输出:

Installed kernelspec yolo in /Users/jefferliu/Library/Jupyter/kernels/yolo

启动 JupyterLab:

jupyter lab

服务成功运行在:

http://localhost:8888/lab

进入 JupyterLab 后,应选择以下内核:

Python 3.11 - YOLO MPS

JupyterLab、内核注册和本地服务均已正常启动。

需要注意,Jupyter 启动地址中通常包含访问 Token。Token 相当于临时访问凭证,不应复制到公开博客、聊天群或代码仓库中。


十二、安装过程中遇到的一个小问题

停止 JupyterLab 时,终端出现:

Shut down this Jupyter server (y/[n])?

此时在同一个终端直接输入了:

brewinstall--caskvisual-studio-code

但这条命令并没有被 Shell 执行,而是被 Jupyter 当成了关机确认问题的回答,因此 Jupyter 又恢复了运行。日志最后显示的是resuming operation,而不是 VS Code 安装成功。

正确处理方法有两种。

第一种,先关闭 Jupyter:

Control + C y

关闭后再执行:

brewinstall--caskvisual-studio-code

第二种,保持 Jupyter 运行,另外打开一个新的终端窗口,再安装 VS Code。


十三、在 JupyterLab 中验证 MPS

创建 Notebook 后,可以运行下面的代码:

importplatformimporttorchimportultralyticsprint("架构:",platform.machine())print("PyTorch:",torch.__version__)print("Ultralytics:",ultralytics.__version__)print("MPS可用:",torch.backends.mps.is_available())device="mps"iftorch.backends.mps.is_available()else"cpu"print("当前设备:",device)

预期输出:

架构: arm64 PyTorch: 2.13.0 Ultralytics: 8.4.91 MPS可用: True 当前设备: mps

也可以直接在 Notebook 中训练 YOLO11:

fromultralyticsimportYOLO model=YOLO("yolo11n.pt")results=model.train(data="coco8.yaml",epochs=1,imgsz=640,batch=2,device="mps",workers=2)

十四、保存当前环境

仅仅把安装命令记录在文章中还不够。为了准确复现,建议在环境稳定后导出依赖。

导出 pip 依赖:

python-mpip freeze>requirements-yolo-m5.txt

导出完整 Conda 环境:

condaenvexport--no-builds>yolo-m5-environment.yml

以后可以通过以下命令重建环境:

condaenvcreate-fyolo-m5-environment.yml

查看环境:

condaenvlist

激活环境:

conda activate yolo

退出环境:

conda deactivate

彻底删除环境:

conda remove-nyolo--all

十五、完整复现命令

下面是根据本次实际版本整理的精简复现流程:

# 1. 创建环境conda create-nyolopython=3.11-y# 2. 激活环境conda activate yolo# 3. 验证架构python-c"import platform; print(platform.machine())"# 4. 更新基础工具python-mpipinstall--upgradepip setuptools wheel# 5. 安装指定版本的PyTorchpython-mpipinstalltorch==2.13.0torchvision==0.28.0# 6. 安装指定版本的Ultralyticspython-mpipinstallultralytics==8.4.91# 7. 检查环境yolo checks# 8. 使用YOLO11进行冒烟训练yolo detect train\model=yolo11n.pt\data=coco8.yaml\epochs=1\imgsz=640\batch=2\device=mps\workers=2# 9. 安装JupyterLabpython-mpipinstalljupyterlab==4.6.1ipykernel==7.3.0# 10. 注册Jupyter内核python-mipykernelinstall\--user\--nameyolo\--display-name"Python 3.11 - YOLO MPS"# 11. 启动JupyterLabjupyter lab

十六、总结

本次在 Apple M5 MacBook Pro 上完成了 YOLO 基础训练环境搭建,并验证了以下内容:

  • Miniforge 和 Conda 环境正常;
  • Python 运行在原生 ARM64 架构;
  • PyTorch 正确支持 MPS;
  • Apple M5 GPU 可以执行张量计算;
  • Ultralytics 安装成功;
  • YOLO 模型能够通过 MPS 完成训练和验证;
  • best.ptlast.pt权重正常生成;
  • JupyterLab 和独立 YOLO 内核正常运行。

Apple M5 虽然不能使用 CUDA,但对于 YOLO Nano、Small 等轻量模型的学习、小型数据集训练、模型微调和功能验证已经足够。

接下来就可以进入真正的项目阶段:准备自己的图片、完成目标标注、编写data.yaml,然后使用yolo11n.pt开始第一个自定义目标检测模型训练。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 10:40:18

《陈柏睿的“暑假特别篇”——放假三天,我外婆已经想退货了》

陈柏睿放暑假了。 才三天&#xff0c;我外婆已经问了我三次&#xff1a;“你弟能不能提前开学&#xff1f;” 他放假第一天的计划是&#xff1a;睡到自然醒。 结果他的“自然醒”是早上6点——然后他把全家都吵醒了。 第二天他睡到10点&#xff0c;我外婆说“终于能安静一下”…

作者头像 李华