【译】在 Mac 上加速 PyTorch 训练
写在前面
- 为什么突然深度介入大模型领域了
因为最近在评估大模型用于行业应用,通过 OpenCompass 排行榜了解到了很多大模型,像文心一言是自己深度试用过的,趁着这次评估,也体验或者通过其他团队的介绍了解了通义千问、清华智谱、书生·浦语。
- 为什么翻译这篇文章
从清华智普开源的 ChatGLM3-6B 模型看到说苹果电脑本地(苹果芯片或者带了 AMD 独立显卡的)运行大模型有 MPS 在后面,不用关心显存,所以准备安装了环境,自己来深度体验一下ChatGLM3-6B的微调,这里要感谢 ChatGLM3-6B 的官方文档,写的很详细。
Mac开发者无需关注GPU的限制。对于搭载了 Apple Silicon 或者 AMD GPU 的 Mac,可以使用 MPS 后端来在 GPU 上运行 ChatGLM3-6B。需要参考 Apple 的 官方说明 安装 PyTorch-Nightly(正确的版本号应该是2.x.x.dev2023xxxx,而不是 2.x.x)。
原文地址:Accelerated PyTorch training on Mac
以下是译文
一、Metal 加速
PyTorch 使用新的 Metal Performance Shaders (MPS) 后端为 GPU 训练加速。MPS 后端扩展了 PyTorch 框架,提供了在 Mac 上设置和运行操作的脚本和功能。MPS 框架通过针对每个 Metal GPU 系列的独特特性进行微调的内核来优化计算性能。新的 MPS 设备将机器学习计算图形和基元映射到 MPS Graph 框架和 MPS 提供的调整内核上。
二、要求
- 配备 Apple silicon 或 AMD GPU 的 Mac 电脑
- macOS 12.3 或更高版本
- Python 3.7 或更高版本
- Xcode 命令行工具:xcode-select --install
三、开始
您可以使用 Anaconda 或 pip。请注意,使用 Apple 芯片的 Mac 和使用 Intel x86 的 Mac 的环境设置会有所不同。
使用安装页面上的 PyTorch 安装选择器,为 MPS 设备加速选择 Preview (Nightly)。MPS 后端支持是 PyTorch 1.12 正式版的一部分。PyTorch 的预览版(夜间版)将为您的设备提供最新的 MPS 支持。
- 设置
Anaconda
Apple silicon
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
sh Miniconda3-latest-MacOSX-arm64.sh
x86
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
sh Miniconda3-latest-MacOSX-x86_64.sh
pip
你可以使用 macOS 预装的 pip3。或者,你也可以从 Python 网站或 Homebrew 软件包管理器中安装。
- 安装
Anaconda
conda install pytorch torchvision torchaudio -c pytorch-nightly
pip
pip3 install --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/nightly/cpu
从源代码构建
构建支持 MPS 的 PyTorch 需要 Xcode 13.3.1 或更高版本。您可以从 Mac App Store 下载最新的公开 Xcode 版本,或从 Mac App Store 下载最新的测试版,或从 Apple Developer 网站下载最新的测试版。USE_MPS 环境变量控制 PyTorch 的构建,并包含 MPS 支持。
要构建 PyTorch,请遵循 PyTorch 网站上提供的说明。
- 验证
您可以使用简单的 Python 脚本验证 MPS 支持:
import torch
if torch.backends.mps.is_available():mps_device = torch.device("mps")x = torch.ones(1, device=mps_device)print (x)
else:print ("MPS device not found.")
输出结果应显示
tensor([1.], device='mps:0')
四、反馈意见
MPS 后端处于测试阶段,我们正在积极解决问题和修复错误。要报告问题,请使用 GitHub 问题跟踪器,标签为 “module: mps”。
五、Resources
- PyTorch installation page
- PyTorch documentation on MPS backend
- Add a new PyTorch operation to MPS backend
- PyTorch performance profiling using MPS profiler
相关文章:
【译】在 Mac 上加速 PyTorch 训练
写在前面 为什么突然深度介入大模型领域了 因为最近在评估大模型用于行业应用,通过 OpenCompass 排行榜了解到了很多大模型,像文心一言是自己深度试用过的,趁着这次评估,也体验或者通过其他团队的介绍了解了通义千问、清华智谱、…...
如何在Windows部署GoLand并通过SSH远程连接Linux服务器
文章目录 1. 安装配置GoLand2. 服务器开启SSH服务3. GoLand本地服务器远程连接测试4. 安装cpolar内网穿透远程访问服务器端4.1 服务器端安装cpolar4.2 创建远程连接公网地址 5. 使用固定TCP地址远程开发 本文主要介绍使用GoLand通过SSH远程连接服务器,并结合cpolar内…...
Netty源码三:NioEventLoop创建与run方法
1.入口 会调用到父类SingleThreadEventLoop的构造方法 2.SingleThreadEventLoop 继续调用父类SingleThreadEventExecutor的构造方法 3.SingleThreadEventExecutor 到这里完整的总结一下: 将线程执行器保存到每一个SingleThreadEventExcutor里面去创建了MpscQu…...
【讲座分享】| 复旦大学张奇教授——《自然语言发表论文如何打怪升级?NLP顶会论文发表》
文章目录 1 基础关1.1 基础书籍1.2 提高书籍1.3 课程链接1.4 编程实战 2 阅读关2.1 分层过滤2.2 集团作战,信息获取2.3 论文如何泛读 3 动机 方向关3.1 快速发论文3.2 好的研究 4 写作关4.1 论文写作流程4.2 从读者角度出发4.3 每一部分怎么写4.3.1 Abstract摘要4.3…...
面试八股文(3)
文章目录 1.HashSet如何检查重复2.comparable和Comparator区别3.ConcurrentHashMap和Hashtable区别4.线程和进程5.并发与并行的区别6.为什么使用多线程7.使用多线程可能带来问题8.线程的生命周期和状态9.什么是上下文切换10.线程死锁11.产生死锁四个条件12.如何避免死锁 1.Hash…...
Kubernetes WebHook 入门 -- 入门案例: apiserver 接入 github
博客原文 文章目录 k8s 集群配置介绍Admission WebhookWebHook 入门实践: github 认证接入web 服务器Dockerfile 镜像制作amd64x86_64构造镜像检验镜像 Makefilewebhook 接入 apiserverwebhook.yamlapiserver 挂载 webconfig在 github 中创建认证 token将 token 添加到 kubecon…...
办公软件巨头CCED、WPS面临新考验,新款办公软件异军突起
办公软件巨头CCED、WPS的成长经历 众所周知,CCED和WPS在中国办公软件领域树立了两大知名品牌的地位。然而,它们的成功并非一朝一夕的成就,而是历经了长时间的发展与积淀。 在上世纪80年代末至90年代初,CCED作为中国大陆早期的一款…...
unity角色触摸转向
1、挂载脚本到角色的父物体A上 2 、以屏幕左边的触摸为移动,右边为转向操作 3、加载角色时,将角色的父物体设置为A,须将角色的位置和角度置0 using System; using System.Collections; using System.Collections.Generic; using UnityEngin…...
世界顶级汽车品牌源代码遭泄露 详解源代码凭据安全解决方案
源代码凭据安全,您别忽视 !!! 一、事件回顾 2024年1月29日,RedHunt 实验室的研究员Lohit爆料:某世界顶级的豪华汽车品牌源代码面临泄露风险!人为错误致GitHub令牌事故引发重大安全担忧。 RedHunt Labs在一次互联网扫描时&#x…...
Mysql-备份与恢复
目录 一、备份表 1.无需备份表结构 2.备份表结构 3.mysqldump方式备份表 二、备份库 一、备份表 1.无需备份表结构 CREATE TABLE a_bak as select * from a;#备份表(不包含表结构)TRUNCATE TABLE a;#清空表 INSERT INTO a SELECT * FROM a_bak;#插…...
基于STM32的UART/USART数据传输的错误检测和纠错机制研究
在STM32的UART/USART数据传输过程中,为了确保数据的可靠性,通常需要使用错误检测和纠错机制。常见的错误检测和纠错技术包括奇偶校验、循环冗余校验(CRC)、硬件流控制和重发机制等。本文将重点介绍这些技术在STM32上的应用&#x…...
「优选算法刷题」:计算布尔二叉树的值
一、题目 给你一棵 完整二叉树 的根,这棵树有以下特征: 叶子节点 要么值为 0 要么值为 1 ,其中 0 表示 False ,1 表示 True 。非叶子节点 要么值为 2 要么值为 3 ,其中 2 表示逻辑或 OR ,3 表示逻辑与 AND…...
A系统数据表同步到B系统数据表
一、 事务操作 (小量数据) 事务操作通常用于确保数据的一致性和完整性。以下是一些常见的应用场景: 银行转账:当从一个账户向另一个账户转账时,需要确保两个操作(从一个账户扣款和向另一个账户存款&#x…...
Qt实现类似ToDesk顶层窗口 不规则按钮
先看效果: 在进行多进程开发时,可能会遇到需要进行全局弹窗的需求。 因为平时会使用ToDesk进行远程桌面控制,在电脑被控时,ToDesk会在右下角进行一个顶层窗口的提示,效果如下: 其实要实现顶层窗口…...
发布4-运行JRT程序
到了本章节,你需要准备好JDK17的环境和idea环境。并且安装好选择的数据库软件。这章将正式开始JRT的程序开发。 首先获取程序,我会给下载地址 下载后解压会得到下图目录的文件结构,DBFile放IRIS和PG的数据库文件,JRTClient放打包…...
利用VPN设备漏洞入侵!新型勒索软件CACTUS攻击手法分析
近期,亚信安全应急响应中心截获了利用VPN设备已知漏洞传播的新型勒索软件CACTUS,该勒索于2023年3月首次被发现,一直保持着活跃状态。CACTUS勒索软件通过Fortinet VPN的已知漏洞进行入侵(黑客首先获取到VPN账号,再通过V…...
第7章 SpringBoot安全管理
学习目标 了解SpringSecurity安全管理的功能 掌握SpringSecurity的安全配置 掌握SpringSecurity自定义用户认证的实现方法 掌握SpringSecurity自定义用户授权管理的实现方法 掌握如何使用SpringSecurity实现页面控制 实际开发中,一些应用通常要考虑到安全性问题。例如,对于一…...
【QT+QGIS跨平台编译】之二十二:【FontConfig+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
文章目录 一、FontConfig介绍二、文件下载三、文件分析四、pro文件五、编译实践 一、FontConfig介绍 FontConfig 是一个用于配置和定制字体的库,广泛应用于基于X Window系统的操作系统中,尤其是在Linux和Unix-like系统中。它为应用程序提供了一种统一的…...
echarts中绘制3D三维地球
简介 echarts中的三维地球,需要用到世界地图json数据,我把json文件放到我的资源中,有需要的自行下载。 安装插件 // 安装echats npm install echarts --save npm install echarts-gl --save 项目中引用 1,引入安装的echarts…...
go grpc高级用法
文章目录 错误处理常规用法进阶用法原理 多路复用元数据负载均衡压缩数据 错误处理 gRPC 一般不在 message 中定义错误。毕竟每个 gRPC 服务本身就带一个 error 的返回值,这是用来传输错误的专用通道。gRPC 中所有的错误返回都应该是 nil 或者 由 status.Status 产…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
