欢迎大家阅读本文章,本文章是一篇使用七条解决数据太大爆内存的文章。这篇文章会给大家带来一些关于内存和大数据的相关知识详解,希望本篇文章能帮助到你,对你有所收获,让我们开始学习吧,编程学习网提醒您:大家仔细阅读文章。编程学习网教育提醒您:要认真好好阅读哦~~
在研究、应用机器学习算法的经历中,相信大伙儿经常遇到数据集太大、内存不够用的情况。
这引出一系列问题:
怎么加载十几、几十 GB 的数据文件?
运行数据集的时候算法崩溃了,怎么办?
怎么处理内存不足导致的错误?
本文将讨论一些常用的解决办法,供大家参考。
处理大型 ML 数据文件的七种思路
1. 分配更多内存
有的机器学习工具/库有默认内存设置,比如 Weka。这便是一个限制因素。
你需要检查一下:是否能重新设置该工具/库,分配更多内存。
对于 Weka,你可以在打开应用时,把内存当作一个参数进行调整。
2. 用更小的样本
你真的需要用到全部数据吗?
可以采集一个数据的随机样本,比如前 1,000 或 100,000 行。在全部数据上训练最终模型之前(使用渐进式的数据加载技巧),先试着用这个小样本解决问题。
总的来说,对算法做快速地抽查、看到结果在前后的变化,在机器学习领域是一个很好的习惯。
你还可以考虑:相对于模型技巧,做一个数据大小的敏感性分析。或许,对于你的随机小样本,有一个天然的边际效应递减分水岭。越过这个关口,继续增加的数据规模带来的好处微乎其微。
3. 更多内存
你必须要用 PC 吗?
你可以考虑内存、性能高一个量级的计算设备。比如,租用 AWS 这样的云服务。租用云端有数十 GB 内存的机器,最低价格每小时不到一美元。我个人觉得这是非常实际的选择。
4. 转换数据格式
你是否把数据存为原始的 ASCII 文本,比如 CSV 文件?
或许,使用其它格式能加速数据载入并且降低内存占用。好的选择包括像 GRIB、NetCDF、HDF 这样的二进制格式。
有很多命令行工具能帮你转换数据格式,而且不需要把整个数据集载入内存里。
换一种格式,可能帮助你以更紧凑的形式存储数据,节省内存空间;比如 2-byte 整数,或者 4-byte 浮点。
5. 流式处理数据,或渐进式的数据加载
你的所有数据,需要同时出现在内存里吗?
或许,你可以用代码或库,随时把需要的数据做流式处理或渐进式加载,导入内存里训练模型。
这可能需要算法使用优化技术迭代学习,比如使用随机梯度下降。那些需要内存里有所有数据、以进行矩阵运算的算法,比如某些对线性回归和逻辑回归的实现,就不适用了。
比如,Keras 深度学习 API 就提供了渐进式加载图像文件的功能,名为 flow_from_directory
另一个例子式 Pandas 库,可批量载入大型 CSV 文件。
6. 使用关系数据库(Relational database)
关系数据库为存储、访问大型数据集提供了标准化的方法。
在内部,数据存在硬盘中,能渐进式地 in batch 批量加载,并使用标准检索语言 SQL 检索。
像 MySQL、Postgres 这样的开源数据库工具,支持绝大多数的(全部?)编程语言。许多机器学习工具,都能直接与关系数据库连通。你也可以用 SQLite 这样更轻量的方法。
我发现,这种方法对大型表格式数据集非常有效率。
雷锋网提醒,你需要用能迭代学习的算法。
7. 使用大数据平台
有的情况下,你可能必须要使用大数据平台,即为处理超大型数据集而开发的平台。它们能让你进行数据转换,并在其上开发机器学习算法。
两个很好的例子是 Hadoop 与机器学习库 Mahout,以及 Spark 与 MLLib 库。
我认为,这是用尽上述办法仍无法解决的情况下,才需要采用的最后手段。单纯是这为你的机器学习项目所带来的额外硬件、软件复杂情况,就会消耗许多精力。
即便如此,有的任务确实数据太过庞大,前面的选项都无法奏效。
小知识:
容量问题
这里所说的“大容量”通常可达到PB级的数据规模,因此,海量数据存储系统也一定要有相应等级的扩展能力。与此同时,存储系统的扩展一定要简便,可以通过增加模块或磁盘柜来增加容量,甚至不需要停机。在解决容量问题上,不得不提LSI公司的全新Nytro™智能化闪存解决方案,采用Nytro产品,客户可以将数据库事务处理性能提高30倍,并且超过每秒4.0GB的持续吞吐能力,非常适用于大数据分析。
延迟问题
“大数据”应用还存在实时性的问题。特别是涉及到与网上交易或者金融类相关的应用。有很多“大数据”应用环境需要较高的IOPS性能,比如HPC高性能计算。此外,服务器虚拟化的普及也导致了对高IOPS的需求,正如它改变了传统IT环境一样。为了迎接这些挑战,各种模式的固态存储设备应运而生,小到简单的在服务器内部做高速缓存,大到全固态介质可扩展存储系统通过高性能闪存存储,自动、智能地对热点数据进行读/写高速缓存的LSI Nytro系列产品等等都在蓬勃发展。
安全问题
某些特殊行业的应用,比如金融数据、医疗信息以及政府情报等都有自己的安全标准和保密性需求。虽然对于IT管理者来说这些并没有什么不同,而且都是必须遵从的,但是,大数据分析往往需要多类数据相互参考,而在过去并不会有这种数据混合访问的情况,大数据应用催生出一些新的、需要考虑的安全性问题,这就充分体现出利用基于DuraClass™ 技术的LSI SandForce®闪存处理器的优势了,实现了企业级闪存性能和可靠性,实现简单、透明的应用加速,既安全又方便。
大数据应用领域成本问题
对于那些正在使用大数据环境的企业来说,成本控制是关键的问题。想控制成本,就意味着我们要让每一台设备都实现更高的“效率”,同时还要减少那些昂贵的部件。重复数据删除等技术已经进入到主存储市场,而且还可以处理更多的数据类型,这都可以为大数据存储应用带来更多的价值,提升存储效率。在数据量不断增长的环境中,通过减少后端存储的消耗,哪怕只是降低几个百分点,这种锱铢必较的服务器也只有LSI推出的Syncro™ MX-B机架服务器启动盘设备都能够获得明显的投资回报,当今,数据中心使用的传统引导驱动器不仅故障率高,而且具有较高的维修和更换成本。如果用它替换数据中心的独立服务器引导驱动器,则能将可靠性提升多达100倍。并且对主机系统是透明的,能为每一个附加服务器提供唯一的引导镜像,可简化系统管理,提升可靠性,并且节电率高达60%,真正做到了节省成本的问题。
数据的积累
许多大数据应用都会涉及到法规遵从问题,这些法规通常要求数据要保存几年或者几十年。比如医疗信息通常是为了保证患者的生命安全,而财务信息通常要保存7年。而有些使用大数据存储的用户却希望数据能够保存更长的时间,因为任何数据都是历史记录的一部分,而且数据的分析大都是基于时间段进行的。要实现长期的数据保存,就要求存储厂商开发出能够持续进行数据一致性检测的功能以及其他保证长期高可用的特性。同时还要实现数据直接在原位更新的功能需求。
大家都会了呢~相信大家对解决数据太大爆内存也有些了解了呢~也一定知道了大数据的相关知识的详细介绍,要是您还有什么问题,编程学习网平台,随时为您服务,关于更多的知识,后面还有很多关于类似的文章,期待大家的到来。