MegEngine DTR:深度学习框架的显存优化与技术创新

版权申诉
5星 · 超过95%的资源 1 下载量 114 浏览量 更新于2024-07-05 收藏 7.55MB PDF 举报
"本文档主要介绍了MegEngine深度学习框架的DTR技术与训练框架的创新,以及其发展历程和性能提升。" 深度学习框架MegEngine自2015年起开始投入使用,并在2020年正式开源,历经多个版本的迭代,如Alpha、Beta,直至稳定版本V1.6。在不断的优化过程中,MegEngine致力于提供简洁的开发体验,以满足产业应用的需求。其中,TracedModule的实现显著提升了交付效率,而推理阶段的自动layout选择则增强了CUDA运行速度。 2020年6月的v0.6.0版本中,MegEngine重构了训练框架,大幅提升了动态训练性能,同时增加了对多硬件平台和国产芯片的支持。此外,它还引入了第三方框架兼容性,以及Midout超轻量级部署功能。 MegEngine在2021年3月的v1.3.0版本中,开始支持ARM系列CPU,完善了量化训练和推理功能,确保全面覆盖主流计算设备。动态计算能力的升级和基于cutlass卷积算子的优化,进一步提升了计算效率。 最重要的技术创新之一是DTR(动态张量重计算)功能的引入。在v1.6.0版本中,MegEngine成为了首个支持DTR的框架,这使得开发者能通过简单的一行代码(megengine.dtr.enable())开启这一功能,显著降低了显存占用,使得模型训练的硬件门槛大幅降低。DTR适用于任何模型,与fp16结合使用时,可以实现更好的性能表现。对比实例显示,在2080Ti显卡上,使用DTR+fp16的MegEngine在处理相同任务时,其吞吐量甚至优于PyTorch的Checkpoint+fp16方案。 DTR的可视化工具TensorInterpreter展示了张量在内存中的行为,帮助开发者更好地理解计算过程。所有内核都具备独立的静态shape推导能力,确保了高效运行。 MegEngine通过DTR等技术创新,不仅提高了训练效率和资源利用率,还提供了更广泛硬件的支持,简化了开发流程,为企业和研究机构提供了强大的深度学习工具。随着版本的持续迭代,MegEngine将持续优化深度学习框架,使其更易用、更高效。

dtc.predict(wine_target.iloc[:,1:].values) Out[33]: array([2., 2., 2., 3., 1.]) In [34]: from sklearn.metrics import mean_squared_error #先获得预测的y值y_pre y_pre=dtc.predict(x_test) mean_squared_error(y_test,y_pre) Out[34]: 0.0 In [35]: print("决策树 训练精度:",dtc.score(x_test,y_test)) print("决策树 泛化精度:",dtc.score(x_train,y_train)) 决策树 训练精度: 1.0 决策树 泛化精度: 1.0 In [39]: #KNN最近邻分类算法 from sklearn.neighbors import KNeighborsClassifier from sklearn.datasets import load_digits from sklearn.model_selection import train_test_split x=wine_data.iloc[:,1:].values y=wine_data.iloc[:,0].values x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=125) dtr=KNeighborsClassifier() dtr.fit(x_train,y_train) dtr.score(x_test,y_test) Out[39]: 0.9807692307692307 In [42]: model_knn=KNeighborsClassifier(n_neighbors=5)#看5个近邻的类别确定分类 model_knn.fit(x_train,y_train) #预测 model_knn.predict(x_test) Out[42]: array([3., 3., 1., 2., 1., 3., 3., 1., 2., 3., 2., 1., 2., 1., 2., 1., 2., 2., 3., 1., 1., 3., 1., 2., 1., 2., 3., 3., 2., 2., 1., 1., 2., 1., 1., 2., 3., 1., 3., 3., 2., 2., 2., 2., 1., 1., 1., 1., 2., 3., 2., 1.]) In [43]: dtr.predict(wine_target.iloc[:,1:].values) Out[43]: array([2., 2., 3., 3., 1.]) In [41]: neighbors = 3 from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(neighbors) knn.fit(x_train,y_train) print("KNN 训练精度:",knn.score(x_test,y_test)) print("KNN 泛化精度:",knn.score(x_train,y_train)) KNN 训练精度: 0.9615384615384616 KNN 泛化精度: 0.9586776859504132

2023-06-10 上传