Mac Apple Silicon M1/M2 homebrew miniforge conda pytorch yolov5深度学习环境搭建并简单测试MPS GPU加速

这篇具有很好参考价值的文章主要介绍了Mac Apple Silicon M1/M2 homebrew miniforge conda pytorch yolov5深度学习环境搭建并简单测试MPS GPU加速。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开始安装

笔者使用的是一台M2版本的Macbook Air,虽然苹果作为深度学习的训练机不太合适,但是由于macbook作为打字机实在是无可挑剔,所以使用macbook调试一下pytorch的代码再放到集群上训练或者直接在mac上调试运行代码都是不错的体验,本文以在mac上直接调试yolov5为目标,大概记录一下步骤。

零,获取代理

这一步就是大家八仙过海各显神通的时候了😄
或者直接使用国内源安装,可以参考Homebrew国内如何自动安装(国内地址)(Mac & Linux)
以下过程都是基于有代理的情况下的安装过程,基本无痛

一,配置代理

总之开启代理后,除了浏览器可以走代理访问之外,还需要配置zsh和git走代理,否则homebrew的安装会比较痛苦。

配置zsh走代理

#首先创建~/.zshrc
vim ~/.zshrc

加入本地代理的端口地址,例如127.0.0.1:8080

function onproxy() {
    export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
    export http_proxy="http://127.0.0.1:8080"
    export https_proxy=$http_proxy
    export all_proxy=socks5://127.0.0.1:8080
    echo -e "\033[32mproxy on!\033[0m"
}

function offproxy(){
    unset http_proxy
    unset https_proxy
    unset all_proxy
    echo -e "\033[31mproxy off!\033[0m"
}

然后source一下

source ~/.zshrc

运行一下onproxy开启代理(后面也要记得重启terminal的时候运行开一下,或者写到.zshrc里)

onproxy

测试一下是不是成功

curl -vv https://www.google.com

如果返回报文中有status 200 OK等字样就说明现在配置成功,但是ping依然是不能正常使用代理的,所以即便配置了代理,ping google还是不行的。
m2跑yolo,deeplearning,pytorch,深度学习,macos,conda

配置git走代理

将git也配置一下走代理:

git config --global http.proxy http://127.0.0.1:8080

完工!

二,安装homebrew

安装homebrew十分简单

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

执行完成后会提示你让你把homebrew添加到path中,按图中操作就可以
m2跑yolo,deeplearning,pytorch,深度学习,macos,conda

(echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/xxx/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

然后就可以愉快的使用brew install了,就和ubuntu的apt install一样啦!

三,安装miniforge

有了homebrew安装miniforge就简单了

brew install miniforge

完成!

四,创建conda环境

首先初始化conda环境

conda init zsh

关闭terminal重新打开就能看到(base)环境已经启用
m2跑yolo,deeplearning,pytorch,深度学习,macos,conda
然后就是创建pytorch的conda环境

conda create -n torch python=3.8

创建完运行

conda activate torch

就可以开始使用专属的conda虚拟环境了。

五,安装pytorch

直接按照官网的安装,已经包含了MPS加速(MPS:Metal Performance Shaders)
m2跑yolo,deeplearning,pytorch,深度学习,macos,conda

# MPS acceleration is available on MacOS 12.3+
pip3 install torch torchvision torchaudio

完成!

六,运行yolov5

首先clone源码,安装依赖

git clone https://github.com/ultralytics/yolov5.git
pip install -r requirements.txt 

等待安装完毕
m2跑yolo,deeplearning,pytorch,深度学习,macos,conda

现在就可以开始测试检测图片了
我们在yolov5文件夹里创建一个imgs文件夹,里面放一张1.jpg的测试图像
m2跑yolo,deeplearning,pytorch,深度学习,macos,conda
如下图所示

m2跑yolo,deeplearning,pytorch,深度学习,macos,conda
然后运行

python detect.py --weights yolov5s.pt --source 'imgs/1.jpg'

过程中会自动下载yolov5s.pt的权重
m2跑yolo,deeplearning,pytorch,深度学习,macos,conda
然后将检测结果保存到yolov5/runs/detect/exp中
m2跑yolo,deeplearning,pytorch,深度学习,macos,conda
打开1.jpg看一下
m2跑yolo,deeplearning,pytorch,深度学习,macos,conda
检测成功,yolov5在MacBook上就跑起来了!环境初步搭建完成!

六,测试Apple Silicon的MPS GPU加速

测试yolov5的mps加速

由于pytorch可以跑cpu,所以我们还不知道苹果的mps gpu加速能否正常起作用,那我们来测试一下。

打开vscode,创建testyolov5mps.py,环境选择我们刚刚创建的conda环境torch,编辑一下
m2跑yolo,deeplearning,pytorch,深度学习,macos,conda

import torch

print(torch.backends.mps.is_available)
print(torch.backends.mps.is_built)

device = torch.device("mps" if torch.backends.mps.is_available else"cpu")

print(device)
exit()

运行一下

(torch) xx@xxx-MacBook-Air testyolov5 % python testyolov5mps.py 
<functools._lru_cache_wrapper object at 0x114d0f0d0>
<function is_built at 0x114d06ee0>
mps
(torch) xx@xxx-MacBook-Air testyolov5 % 

都有输出结果,并且device为mps,mps加速有效,我们接下来用yolov5的官方示例简单测试一下效果

import torch

print(torch.backends.mps.is_available)
print(torch.backends.mps.is_built)

device = torch.device("mps" if torch.backends.mps.is_available else"cpu")

print(device)
# exit()

# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")  # or yolov5n - yolov5x6, custom
model.to(device)
# exit()
# Images
img = "https://ultralytics.com/images/zidane.jpg"  # or file, Path, PIL, OpenCV, numpy, list

# Inference
results = model(img)

# Results
results.print()  # or .show(), .save(), .crop(), .pandas(), etc.

结果发现报错了,如下

(torch) xx@xxx-MacBook-Air testyolov5 % python testyolov5mps.py
<functools._lru_cache_wrapper object at 0x140872160>
<function is_built at 0x140869f70>
mps
Using cache found in /Users/xx/.cache/torch/hub/ultralytics_yolov5_master
YOLOv5 🚀 2023-2-27 Python-3.8.16 torch-1.13.1 CPU

Fusing layers... 
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients
Adding AutoShape... 
Traceback (most recent call last):
  File "testyolov5mps.py", line 23, in <module>
    results.print()  # or .show(), .save(), .crop(), .pandas(), etc.
  File "/Users/xx/.cache/torch/hub/ultralytics_yolov5_master/models/common.py", line 825, in print
    LOGGER.info(self.__str__())
  File "/Users/xx/.cache/torch/hub/ultralytics_yolov5_master/models/common.py", line 831, in __str__
    return self._run(pprint=True)  # print results
  File "/Users/xx/.cache/torch/hub/ultralytics_yolov5_master/models/common.py", line 745, in _run
    for c in pred[:, -1].unique():
  File "/opt/homebrew/Caskroom/miniforge/base/envs/torch/lib/python3.8/site-packages/torch/_tensor.py", line 806, in unique
    return torch.unique(
  File "/opt/homebrew/Caskroom/miniforge/base/envs/torch/lib/python3.8/site-packages/torch/_jit_internal.py", line 485, in fn
    return if_false(*args, **kwargs)
  File "/opt/homebrew/Caskroom/miniforge/base/envs/torch/lib/python3.8/site-packages/torch/_jit_internal.py", line 485, in fn
    return if_false(*args, **kwargs)
  File "/opt/homebrew/Caskroom/miniforge/base/envs/torch/lib/python3.8/site-packages/torch/functional.py", line 877, in _return_output
    output, _, _ = _unique_impl(input, sorted, return_inverse, return_counts, dim)
  File "/opt/homebrew/Caskroom/miniforge/base/envs/torch/lib/python3.8/site-packages/torch/functional.py", line 791, in _unique_impl
    output, inverse_indices, counts = torch._unique2(
NotImplementedError: The operator 'aten::_unique2' is not currently implemented for the MPS device. If you want this op to be added in priority during the prototype phase of this feature, please comment on https://github.com/pytorch/pytorch/issues/77764. As a temporary fix, you can set the environment variable `PYTORCH_ENABLE_MPS_FALLBACK=1` to use the CPU as a fallback for this op. WARNING: this will be slower than running natively on MPS.
(torch) xx@xxx-MacBook-Air testyolov5 % 

发现模型中的aten::_unique2操作符没有mps实现,所以只能用fallback模式再试一下

PYTORCH_ENABLE_MPS_FALLBACK=1 python testyolov5mps.py

成功运行

(torch) xx@xxx-MacBook-Air testyolov5 % PYTORCH_ENABLE_MPS_FALLBACK=1 python testyolov5mps.py 
<functools._lru_cache_wrapper object at 0x10cb72160>
<function is_built at 0x10cb69f70>
mps
Using cache found in /Users/xx/.cache/torch/hub/ultralytics_yolov5_master
YOLOv5 🚀 2023-2-27 Python-3.8.16 torch-1.13.1 CPU

Fusing layers... 
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients
Adding AutoShape... 
image 1/1: 900x1200 8 persons, 2 sports balls
Speed: 58.2ms pre-process, 228.4ms inference, 24.2ms NMS per image at shape (1, 3, 480, 640)

可以看到推理时间228.4ms

如果我们注释掉model.to(device),使用cpu模式来跑

(torch) xx@xxx-MacBook-Air testyolov5 % python testyolov5mps.py 
<functools._lru_cache_wrapper object at 0x1248f2280>
<function is_built at 0x1248f20d0>
mps
Using cache found in /Users/xx/.cache/torch/hub/ultralytics_yolov5_master
YOLOv5 🚀 2023-2-27 Python-3.8.16 torch-1.13.1 CPU

Fusing layers... 
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients
Adding AutoShape... 
image 1/1: 900x1200 8 persons, 2 sports balls
Speed: 24.1ms pre-process, 82.8ms inference, 0.7ms NMS per image at shape (1, 3, 480, 640)

仅用了82.8ms就完成了推理,这边先不下结论,还需要再研究一下,不过可以看到mac的gpu加速还不是很完善。

测试resnet50的mps加速

既然yolov5网络太复杂有不支持mps的算子,那我们试试简单的resnet50

import torch
from PIL import Image
import torchvision.transforms as transforms
import numpy as np
import json
import requests
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
import time
# %matplotlib inline

# print(torch.backends.mps.is_available)
# print(torch.backends.mps.is_built)

device = torch.device("mps" if torch.backends.mps.is_available else"cpu")
#device = torch.device("cpu")
print(device)
# exit()

resnet50 = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_resnet50', pretrained=True)
utils = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_convnets_processing_utils')

resnet50.eval().to(device)

uris = ["/Users/xx/workspace/yolov5/imgs/1.jpg" for x in range(1024)]

batch = torch.cat(
    [utils.prepare_input_from_uri(uri) for uri in uris]
).to(device)

with torch.no_grad():
    start = time.time()
    output = resnet50(batch)
    end = time.time()
    # output = torch.nn.functional.softmax(output, dim=1)
    print("using {} total time:{}s".format(device,end-start))

# results = utils.pick_n_best(predictions=output, n=5)
# print(results)

# for uri, result in zip(uris, results):
#     img = Image.open(requests.get(uri, stream=True).raw)
#     img = Image.open(uri)
#     img.thumbnail((256,256), Image.ANTIALIAS)
#     plt.imshow(img)
#     plt.show()
#     print(result)

分别用cpu和mps跑1024张图像,计算推理时间
结果

(torch) xx@xxx-MacBook-Air testyolov5 % python testresnetmps.py
mps
using mps total time:8.64146113395691s
(torch) xx@xxx-MacBook-Air testyolov5 % python testresnetmps.py
cpu
using cpu total time:85.01676988601685s

我们可以看到,推理1024张图使用mps 8.6秒,使用cpu花了85秒,快了10倍,确实有效。

对比测试1080ti,3700x

我们同样的代码用amd 3700x的纯cpu模式跑一下:

cpu
using cpu total time:41.04833006858826s

用cuda在1080ti上再跑一下,由于显存不够1024张分成两个batch来跑:

cuda
batch0infer
batch1infer
using cuda total time:2.7815260887145996s

3700x用时41秒,使用cuda只需要2.78秒

总结

device data model 用时(秒)
Apple M2(8+10) (CPU) 1024张 1 batch resnet50 cls 85.02
Apple M2(8+10) (MPS) 1024张 1 batch resnet50 cls 8.64
AMD 3700X + 1080Ti (CPU) 1024张 1 batch resnet50 cls 41.05
AMD 3700X + 1080Ti (CUDA) 1024张 2 batch resnet50 cls 2.78

m2跑yolo,deeplearning,pytorch,深度学习,macos,conda

测试不是很完善,但是也能看个大概,5w战350w能有这个水平其实还可以。文章来源地址https://www.toymoban.com/news/detail-787733.html

到了这里,关于Mac Apple Silicon M1/M2 homebrew miniforge conda pytorch yolov5深度学习环境搭建并简单测试MPS GPU加速的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 苹果mac m1,m2芯片安装 pytorch和tensorflow的GPU版本

    1.安装 Xcode 2.创建环境 3.打开pytorch官网复制命令, 注意:在mac m上,device是’mps’ 而不是’cuda’, mac的MPS支持MacOS 12.3+  4.测试 1.安装 Xcode 2.创建环境 3. 安装conda install -c apple tensorflow-deps  4.Install base TensorFlow 5.  Install tensorflow-metal plug-in  6.验证 7.完成,附上我安装完pytorch和

    2024年02月13日
    浏览(45)
  • 在 Apple silicon Mac 上 DFU 模式修复或恢复 macOS 固件

    搭载 Apple 芯片的 Mac 电脑 DFU 模式全新安装 macOS Ventura 请访问原文链接:https://sysin.org/blog/apple-silicon-mac-dfu/,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org Mac computers with Apple silicon,简称 Apple silicon Mac,中文翻译为 “搭载 Apple 芯片的 Mac 电脑”。 2023.02.0

    2024年02月08日
    浏览(43)
  • Mac OS 13+,Apple Silicon,删除OBS虚拟摄像头(virtual camera),

    原文链接:   https://www.reddit.com/r/MacOS/comments/142cv OBS为了捕获摄像头视频,将虚拟摄像头插件内置为系统插件了.如下 直接删除没有权限的,要删除他,在mac os 13以后,需要关闭先关闭苹果系统的完整性保护(SIP) Apple 芯片(M1,....)的恢复模式分为两种,回退恢复模式,和配合恢复模式.其中

    2024年02月19日
    浏览(36)
  • Mac M1安装homebrew步骤

    5.运行brew -v 出现以下情况 输入 6、再次输入brew -v显示如下,证明安装成功 7、在终端使用brew install fig 命令安装自动补全工具,下载好回桌面点击fig安装,途中如果有问题就可以 brew uninstall fig,重新安装。在保证网络好的情况下安装软件。

    2024年02月08日
    浏览(38)
  • 【macOS】mac电脑M2芯片安装Homebrew 最简单的方法

    一 Homebrew的安装 打开终端,复制如下命令,按回车执行 M芯片和Intel芯片均可 中途可能需要你手动输入密码,输入完成回车即可(密码不可见 选择中科大或者清华镜像源 有些同学可能会弹出安装git的提示,点击安装等待即可 安装完成之后重新执行上面的Homebrew安装命令 这时

    2024年02月03日
    浏览(46)
  • M1/M2 MAC 安装git

    cmd输入 git --version ,会跳出来说明还没有安装,根据提示点确认安装就好【但gitk等不支持,一般还是从官网下比较方便】 官网中提供了几种,包括先下载Homebrew,再从Homebrew下载Git,从Xcode下载Git等。之前mac下载过Xcode,但太大了,而且不怎么常用这个IDE,所以新电脑我就不想

    2024年02月15日
    浏览(36)
  • Mac M1 Homebrew的安装和warning的解决

    Homebrew是mac的包管理工具,需要在安装xcode之后安装,可以让安装Git, Ruby, Node等软件变得简单。 安装需要联网后,在终端中输入如下命令: m1安装homebrew出现warning,如下: 这将意味着每次运行brew我们必须在终端中输入完整的路径来启动: 在终端输入如下代码,将 PATH=/opt/ho

    2024年02月15日
    浏览(55)
  • Hadoop 安装教程 (Mac m1/m2版)

    安装JDK1.8 这里最好是安装1.8版本的jdk 1. 进入官网Java Downloads | Oracle Hong Kong SAR, PRC,下滑到中间区域找到JDK8 2.选择mac os,下载ARM64 DMG Installer对应版本 注:这里下载需要注册oracle账号,不过很简单,只需要提供邮箱即可,什么邮箱都可以 3.下载完成后,双击.pkg文件,安装步骤安

    2024年02月08日
    浏览(33)
  • Mac M1/M2芯片电脑问题解决汇总

    旧的 mbp 用了7年多了,虽然还能使用,但是严重降低了工作效率了,所以最近入手了 mbp (1月发行的),该电脑使用的是苹果自研的 m2 芯片,性能杠杠滴。在安装会之前的环境和软件时会遇到种种很奇怪的问题,所以本文记录下来,以便有需要的童鞋可以去参考。 在本文开

    2024年02月02日
    浏览(49)
  • Mac搭建安卓模拟器(支持M1/M2)

    最近在研究Vue打包成app,给我的报价器搞一个移动端,奈何没有安卓手机用于测试。所以想到安装一个安卓模拟器。 看了下目前主流的安卓模拟器基本都不支持Mac版本。网易的mumu目前来看还是只支持Intel芯。 下载地址:https://www.aliyundrive.com/s/NZet5jrKxV4 下载完成后将后缀 .mp

    2024年02月16日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包