借助Metal:让机器学习模型飞起来的秘密
鼎哥小视界
2024年07月14日 07:11
收录于文集
共59篇

1. 介绍

  • 演讲者Kamal Ramamoorthy是来自GPU、Graphics和Display团队的软件工程师,将与同事Sam介绍如何使用Metal加速机器学习模型。

  • 部署模型的步骤包括训练、在设备上准备模型以及将模型集成到应用中,本视频将重点关注最后一步。

  • 使用Core ML部署模型时,MPSGraph可提供GPU加速,同时也可以使用PyTorch、TensorFlow和JAX等框架训练模型。

2. 使用Metal加速机器学习的内容

  • MPS和MPS Graph的改进:

  • 针对Transformer模型的性能提升:

  • 计算性能改进:

    • MPSGraph新增操作,将注意力块中的一系列操作合并为单个内核,以更高效地执行,可通过scaledDotProductAttention方法调用。

    • 为提高计算性能,可缓存Query、Key和Value的投影,避免重复计算,通过创建KV缓存张量并使用slice update操作更新现有张量来实现。

  • 内存带宽节省:

    • MPS支持将大语言模型的权重量化为8位整数,今年还支持4位整数格式,以减少内存占用。

    • 量化技术包括均匀量化和使用查找表的量化,可通过dequantize方法将量化值反量化为32位浮点值。

  • MPSGraph会将权重的反量化操作和矩阵乘法操作合并为一个量化矩阵乘法操作,以提高性能。

  • 质量改进:

    • 量化权重时,为每个块单独选择规模和偏移值,而不是对所有权重应用单一的值,以提高重构值的准确性。

    • 使用适配器(adapters)可插入模型中,在微调模型时仅更新适配器内的参数,可用于适应新任务和补偿量化引入的误差,通过MPSGraph callables添加适配器。

  • 加速基于FFT的ML模型的新功能:

    • 快速傅里叶变换(FFT)可将数据从时域或空域转换到频域,是处理音频和图像处理等应用的常见预处理步骤。

    • 实现短时傅里叶变换(STFT)的步骤包括将输入波形划分为多个可能重叠的短窗口,通过窗口函数减少频谱泄漏,最后使用一维FFT操作计算每个窗口的STFT。

  • 通过创建步幅视图(strided view)来划分波形,设置窗口形状、步幅和创建视图,然后计算FFT。

  • MPSGraph Viewer:

    • Xcode 16中新增的MPSGraph Viewer可用于可视化MPSGraph结构,直接打开MPSGraph包可查看操作的连接方式。

    • 创建MPSGraph包的方式包括直接使用MPSGraph编译图形为可执行文件并序列化,或从CoreML包创建可执行文件并序列化,也可使用mpsgraphtool从其他框架转换模型。

    • 在MPSGraph Viewer中,可查看编译选项、操作导航器、图形和操作检查器,能直观理解图形结构,还可查看常量和训练权重,了解模型学习的内容。

    • MPSGraph可能会自动优化操作,将其组合成单个Metal内核,可通过查看器可视化执行的图形。

3. 总结

  • 使用Metal Performance Shaders Graph可加速机器学习,其在流行框架中已被使用以提供最佳性能。

  • 今年针对Transformer的新功能包括计算、内存带宽和质量方面的改进,FFT在MPSGraph中计算更快,新的MPSGraph Viewer有助于理解模型在Apple Silicon上的执行情况。

  • 建议查看MPSGraph的文档和示例代码,并参考其他相关视频以了解更多关于训练和部署的信息。