皇冠体育寻求亚洲战略合作伙伴,皇冠代理招募中,皇冠平台开放会员注册、充值、提现、电脑版下载、APP下载。

首页科技正文

allbet代理开户(www.allbetgame.us):你写的ML代码占若干内存?这件事很主要,但许多人还不懂_欧博开户

admin2022-01-16140

欧博开户

欢迎进入欧博开户(www.aLLbetgame.us),欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

,

选自towardsdatascience

作者:Tirthajyoti Sarkar

机械之心编译

编辑:蛋酱

算法完善是主要的,但更主要的是乐成部署,这篇文章能够辅助你领会有关代码内存占用的一切。

在举行机械学习义务时,你需要学会使用代码快速检查模子的内存占用量。缘故原由很简朴,硬件资源是有限的,单个机械学习模块不应该占用系统的所有内存,这一点在边缘盘算场景中尤其主要。

好比,你写了一个很棒的机械学习程序,或者搭建了一个不错的神经网络模子,然后想在某些 Web 服务或 REST API 上部署模子。或者你是基于工厂传感器的数据流开发了模子,设计将其部署在其中一台工业盘算机上。

这时,你的模子可能是硬件上运行的几百个模子之一,以是你必须对内存占用峰值有所领会。否则多个模子同时到达了内存占用峰值,系统可能会溃逃。

因此,搞清晰代码运行时的内存设置文件(动态数目)异常主要。这与模子的巨细和压缩均无关,可能是你事先已经将其保留在磁盘上的特殊工具,例如 Scikit-learn Joblib dump、Python Pickle dump,TensorFlow HFD5 等。

Scalene:精练的内存 / CPU/GPU 剖析器

首先要讨论的是 Scalene,它是一个 Python 的高性能 CPU 和内存剖析器,由马萨诸塞大学研发。其 GitHub 页面是这样先容的:「 Scalene 是适用于 Python 的高性能 CPU、GPU 和内存剖析器,它可以执行许多其他 Python 剖析器无法做到的事情,提供详细信息比其他剖析器快几个数目级。」

安装

它是一个 Python 包,以是根据通常方式安装:

这样适用于 Linux OS,作者没有在 Windows 10 上举行测试。

在 CLI 或 Jupyter Notebook 内部使用

Scalene 的使用异常简朴:

也可以使用魔术下令在 Jupyter notebook 中使用它:

输出示例

下面是一个输出示例。稍后将对此举行更深入的研究。

这些是 Scalene 一些很酷的功效:

行和函数:讲述有关整个函数和每个自力代码行的信息;

线程:支持 Python 线程;

多历程处置:支持使用 multiprocessing 库;

Python 与 C 的时间:Scalene 用在 Python 与本机代码(例如库)上的时间;

系统时间:区分系统时间(例如,休眠或执行 I / O 操作);

GPU:讲述在英伟达 GPU 上使用的时间(若是有);

复制量:讲述每秒要复制的数据量;

泄露检测:自动查明可能造成内存泄露的线路。

ML 代码详细示例

接下来看一下 Scalene 用于内存设置尺度机械学习代码的事情。对三个模子使用 Scikit-learn 库,并行使其综合数据天生功效来确立数据集。

对比的是两种差异类型的 ML 模子:

多元线性回归模子;

具有相同数据集的深度神经网络模子。

线性回归模子

使用尺度导入和 NUM_FEATURES 、 NUM_SMPLES 两个变量举行一些实验。

这里没有展示数据天生和模子拟合代码,它们是异常尺度的。作者将拟合的模子另存为 pickled dump,并将其与测试 CSV 文件一起加载以举行推断。

为了清晰起见,将所有内容置于 Scalene 执行和讲述环境下循环运行。

当运行下令时:

将这些效果作为输出。注重,此处使用了 --html 标志并将输出通过管道传输到 HTML 文件,以便于讲述。

令人惊讶的是,内存占用险些完全由外部 I / O(例如 Pandas 和 Scikit-learn estimator 加载)控制,少量会将测试数据写到磁盘上的 CSV 文件中。现实的 ML 建模、Numpy、Pandas 操作和推理,基本不会影响内存。

我们可以缩放数据集巨细(行数)和模子庞大度(特征数),并运行相同的内存设置文件以纪录种种操作在内存消耗方面的显示。效果显示在这里。

此处,X 轴代表特征 / 数据点集。注重该图描绘的是百分比,而不是绝对值,展示了种种类型操作的相对主要性。

从这些实验中得出的结论是,Scikit-learn 线性回归估量异常高效,而且不会为现实模子拟合或推理消耗大量内存。

但就代码而言,它确实有牢靠的内存占用,并在加载时会消耗大量内存。不外随着数据巨细和模子庞大性的增添,整个代码占用百分比会下降。若是使用这样的模子,则可能需要关注数据文件 I / O,优化代码以获得更好的内存性能。

深度神经网络若何?

若是我们使用 2 个隐藏层的神经网络(每个隐藏层有 50 个神经元)运行类似的实验,那么效果如下所示。

代码地址:https://github.com/tirthajyoti/Machine-Learning-with-Python/blob/master/Memory-profiling/Scalene/mlp.py

与线性回归模子差异,神经网络模子在训练 / 拟合步骤中消耗大量内存。然则,由于特征少且数据量大,拟合占用的内存较少。此外,还可以实验种种系统结构和超参数,并纪录内存使用情形,到达合适的设置。

复现说明

若是你使用相同的代码复现实验,效果可能会因硬件、磁盘 / CPU / GPU / 内存类型的差异而截然差异。

一些要害建议

最幸亏代码中编写专注于单个义务的小型函数;

保留一些自由变量,例如特征数和数据点,借助最少的更改来运行相同的代码,在数据 / 模子缩放时检查内存设置文件;

若是要将一种 ML 算法与另一种 ML 算法举行对照,请让整体代码的结构和流程尽可能相同以削减杂乱。最好只更改 estimator 类并对比内存设置文件;

数据和模子 I / O(导入语句,磁盘上的模子持久性)在内存占用方面可能会出乎意料地占主导职位,详细取决于建模方案,优化时切勿忽略这些;

出于相同缘故原由,请思量对照来自多个实现 / 程序包的统一算法的内存设置文件(例如 Keras、PyTorch、Scikitlearn)。若是内存优化是主要目的,那么纵然在功效或性能上不是最佳,也必须寻找一种占用最小内存且可以知足完成事情的实现方式;

若是数据 I / O 成为瓶颈,请探索更快的选项或其他存储类型,例如,用 parquet 文件和 Apache Arrow 存储替换 Pandas CSV。可以看看这篇文章:

《How fast is reading Parquet file (with Arrow) vs. CSV with Pandas?》

https://towardsdatascience.com/how-fast-is-reading-parquet-file-with-arrow-vs-csv-with-pandas-2f8095722e94

Scalene 能做的其他事

在本文中,仅讨论了内存剖析的一小部门,眼光放在了规范机械学习建模代码上。事实上 Scalene CLI 也有其他可以行使的选项:

仅剖析 CPU 时间,不剖析内存;

仅使用非零内存削减资源占用;

指定 CPU 和内存分配的最小阈值;

设置 CPU 采样率;

多线程并行,随后检查差异。

最终验证(可选)

在资源较少的情形下,你最好托管一个验证环境 / 服务器,该服务器将接受给定的建模代码(如已开发),并通过这样的内存剖析器运行它以确立运行时统计信息。若是它通过内存占用空间的预定尺度,则只有建模代码会被接受用于进一步部署。

总结

在本文中,我们讨论了对机械学习代码举行内存设置的主要性。我们需要使其更好地部署在服务和机械中,让平台或工程团队能够利便运用。剖析内存也可以让我们找到更高效的、面向特定数据或算法的优化方式。

希望你能在使用这些工具和手艺举行机械学习部署时能够获得乐成。

迁徙学习生长现状及案例探讨

欧博亚洲官方注册

欢迎进入欧博亚洲官方注册(www.aLLbetgame.us),欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

网友评论

4条评论
  • 2021-12-10 00:03:51

    U交所(www.payusdt.vip)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U交所开放usdt otc API接口、支付回调等接口。满意,耐心看