大数据做「AI大模型」数据清洗调优基础篇

关于本文

近期一直在协助做AI大模型数据清洗调优的工作,主要就是使用大数据计算引擎Spark做一些原始数据的清洗工作,整体数据量大约6PB-8PB之间,那么对于整个大数据量的处理性能将是一个重大的挑战,关于具体的调优参数配置项暂时不在本文内容之中,因为调优还在进行时,等事情结束之后,再将相关参数以及说明发布出来。

通常来说,基础大数据集群部署之后不需要做一些调优之类的事情,可以应对几十GB或者几百GB的数据处理诉求(还要结合计算资源多少),但是当数据量和计算任务量级上了一个梯队之后(TB级别),调优有几个基本核心点需要掌握,在更多数据量、更多节点数、更多作业量级的时候,那么就要关注一些组件配置项的默认值是否合理了,一般的默认配置都是保证基本可用的,具体要改哪些配置,修改到多大的阈值要结合很多因素来考虑,本文就根据笔者的一些实战经验来概述三点(仅供参考!)

  • 整体来说,应该关注哪些因素

  • 存储量上升,需要关注哪些指标来应对读写瓶颈

  • 计算并发应该怎么设定合理?遇到瓶颈怎么办?

一:整体来说,应该关注哪些因素?

对于一个大数据集群来说,无非是包含两种类的服务,一种是计算服务(MR、Spark、Flink)、一种是存储服务(HDFS、对象存储),这些服务所运行的介质都是在某些硬件资源之上的,所以,在执行大作业、大数据量的准备工作之前我们要先评估硬件设备是否合理。

从本次调优来说,服务器单台的配置是128C2TB16TB*10 节点数在100台的规模(后续还在扩容),从机器配置来看,基本上已经满配了,但是并不是配置高了就足够了,我们还要关注CPU的调优、内存分配、硬盘盘位和硬盘类型、网络带宽大小(出入带宽流量)等等,硬件配置决定了整体软件处理性能的上限,即便软件写的很厉害,但是硬件配置跟不上的话那其实就等同于巧妇难为无米之炊。

  1. 从CPU层面需要关注那些指标:CPU是整个计算系统的核心,我们所启动的计算作业都是通过CPU的核心来进行计算的,一般大数据作业我们要关心CPU的型号、核心数,更多的核心意味着可以同时处理更多任务,尤其在大数据多线程应用中作用更大一些。其次就是主频,主频表示CPU每秒钟所能执行的基本运算次数,更高的主频通常意味着单线程任务处理速度更快。

  2. 从硬盘层面需要关注那些指标:磁盘选型是作为整个存储吞吐的核心要素之一,同时,硬盘的选型也决定了计算性能的瓶颈,当硬盘吞吐小于计算所产出的数据时,那么硬盘将为作为一个瓶颈问题, 关于硬盘首先是SSD、HDD、云盘这些来选择,你可以使用一些硬盘类的压测工具来测试每块盘的吞吐量和IOPS,比如 dd 、 CrystalDiskMark 等等。

  3. 从网卡流量方面需要关注那些:网卡是整个分布式系统做数据交换必须经过的介质,现在基本都是万兆网卡,整个流量吞吐能到几十Gb/s,在集群部署之前可以选择使用iperf3进行压测,看看整个网卡带宽的阈值是多大。在大数据量的计算过程中各个节点之间的数据传输都要经过网卡来传输,所以,如果网卡的吞吐值很小的话,就会影响整个作业的运行速度。当数据长期积压之后,那么极大可能这个container就会被failed了。

二:存储量上升,需要关注哪些指标来应对读写瓶颈?

当进行数据持续大量导入的时候,那么这里我们就要面临几个问题?除了上面几个硬件瓶颈的问题解决之外,还要查看关于底层存储系统(比如:HDFS、对象存储),对于分布式存储来说,底层都是通过RPC协议来通信的,那么这里就要判断服务本身对于RPC处理线程的大小,一般默认值都是500-1000之间,这个值就会限制大规模集群的数据同步效率。

其次,对于像HDFS这种分布式文件系统来说,为了控制数据同步的速率,可以通过DN的bandwith来控制台数据复制的带宽大小,如果服务本身的这种带宽限制比较小的话呢,也会影响数据同步的效率,所以一般而言,要根据整个集群的规模大小,所处的场景是单纯存储还是单纯计算还是存储和计算都有,如果是单存储场景的话,那么这个值就建议调大一些,可以放到Gb级别(注意:HDFS里面的带宽单位是大B,一个Byte等于8个bit,通常网卡传输是bit来传输的)

在数据量快速上升的时候,即便我们的磁盘空间足够大,也要做好空闲资源的预留,避免有热点问题的时候造成某些节点一直被写入,一直到磁盘写满影响服务的稳定性,那么这时候我们要提前设置好存储系统在写入本地磁盘的时候的预留值,我们至少要预留10%-20%的buffer,或者150G-300G的空间。

最后,就是存储选型是选择本地存储还是云端存储,这两个根本区别就是成本高低和对性能的追求,毋庸置疑,本地存储的性能是高于云端对象存储的,但是成本方面也是远远大于对象存储成本的,所以,对于这块的选型我们需要根据实际情况来判断,是空间换时间,还是成本换性能,或者说二者结合的方式也可以是一个方案,最终的数据存储还是建议留存在对象存储中的,毕竟长期来看成本更低。

三:计算并发应该怎么设定合理?遇到瓶颈怎么办?

关于计算资源这块其实涉及到的因素很多,比如硬件资源的CPU核心数,并发计算的任务多指定的虚拟核心数不能超过物理CPU核心数太多,否则会影响整个计算任务频繁的上下文切换,以及其它计算任务获取不到线程,比如内存的容量,每个并发执行的Task都需要一定的内存资源,来进行数据的加载和处理,我们需要合理的每个Map的内存大小,设置太小容易OOM,设置太大的话则资源浪费,也会触发系统级的内存交换(SWAP)影响性能,比如网络带宽和磁盘IO,如果任务需要频繁的数据同步,那么网络和磁盘的IO会比较高,这时候需要判断是否要进行数据局部加载或者分区/分块计算。

除了上面提到的硬件资源的合理配比之外,对于计算引擎本身的调优也是需要着重考虑,当然不同的计算引擎的调优参数项都不太相同,这里就提及一些能够代表一些共性的点出来吧!

  1. 根据所要计算的文件数量大小,来合理分配并发数,最好是文件数是并发数的整数倍,比如50个文件可以设定50并发或者25并发,避免设定太小影响任务执行时长,设置太大的并发度导致过多的上下文切换和通信开销。

  2. 要监控整个集群的核心指标,来判断那块会是瓶颈,如果发现某个资源使用率持续达到100%,例如CPU一直满载或内存频繁溢出,则可能是资源瓶颈。此时应考虑优化作业代码、提高硬件资源配置或调整资源分配策略。

  3. 如果并行计算任务之间存在大量等待和阻塞,可能是由于并行度设置不合理、任务间依赖关系复杂、锁竞争激烈等原因造成的,需要重新设计任务划分和执行策略。

四:结尾

综上而言,简单的概述了一下关于调优方面的基本面,当作近期调优工作的一个简单记录,后面针对每个组件的调优项以及硬件资源的配比可以单独输出一篇,毕竟目前还在进行时,针对不同的作业不同的数据及规模不同的计算引擎类别都需要针对性的进行调整。

但是,总体而言,掌握基本面之后,在上面进行具象的分析调整,基本上能够找到核心问题点以及对应的解决措施。

最后,就是关于工具的时候,在一些服务运行过程中,可能会有很多难以解释的现象,比如死锁问题、链接池问题、CPU过高问题、内存溢出问题等等,我们需要解决一些工具来排查服务里面具体是哪个类和那个函数出现了问题,一般Java常用的就是jstat、jprofiler,golang常用的就是pprof等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/779266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读+复现】AniPortrait: Audio-Driven Synthesis of Photorealistic Portrait Animation

AniPortrait:音频驱动的逼真肖像动画合成。 code:Zejun-Yang/AniPortrait: AniPortrait: Audio-Driven Synthesis of Photorealistic Portrait Animation (github.com) paper:[2403.17694] AniPortrait: Audio-Driven Synthesis of Photoreal…

Soot入门学习笔记

Soot 适合参考的文档和教程如下: 北京大学软件分析技术 南京大学软件分析 Tutorials for soot McGill University 198:515 (vt.edu) 比较好的笔记资料: 南京大学《软件分析》课程笔记 比较好的入门作业或者案例: CSCE710 Assignmen…

产品说明书二维码生成的优势:数字化时代的智能选择

随着二维码技术的不断发展,越来越多的企业开始选择使用二维码来展示产品使用说明,以取代传统的纸质说明书。这一趋势不仅符合数字化时代的潮流,更为消费者提供了更便捷、更智能的产品使用体验。以下是产品说明书二维码生成的优势:…

C#_泛型_委托

文章目录 泛型泛型的使用泛型的约束委托委托的实例化多播委托委托的调用内置委托类型委托练习泛型委托Lambda表达式(进阶)上期习题答案本期习题 泛型 泛型(Generic) 是一种规范,它允许我们使用占位符来定义类和方法,编译器会在编…

Linux进程概念(下)

1. 进程的状态 为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)。 下面的状态在kernel源代码里定义: /* * The task state array is…

数对 离散化BIT

先把公式变个形&#xff0c;然后直接BIT 枚举右端点查询左端点累加答案 离散化好题&#xff0c;注意BIT写的时候右端点的范围是离散化区间的大小 #include<bits/stdc.h> using namespace std; #define int long long using ll long long; using pii pair<int,int&…

国内好用的chatGPT和AI绘图工具

分享一个比较好用的AI 分享一个比较好用的AI&#xff0c;只是需要开通会员&#xff0c;目前官网的价格是&#xff1a;298&#xff0c;开通之后可以使用chatgpt4、AI绘画、图片融合等等&#xff01;不开通的话是可以免费使用15次的&#xff0c;下面是一些介绍图片&#xff01;链…

UE5数字孪生系列笔记(三)

C创建Pawn类玩家 创建一个GameMode蓝图用来加载我们自定义的游戏Mode新建一个Pawn的C&#xff0c;MyCharacter类作为玩家&#xff0c;新建一个相机组件与相机臂组件&#xff0c;box组件作为根组件 // Fill out your copyright notice in the Description page of Project Set…

Solidity Uniswap V2 Router swapTokensForExactTokens

最初的router合约实现了许多不同的交换方式。我们不会实现所有的方式&#xff0c;但我想向大家展示如何实现倒置交换&#xff1a;用未知量的输入Token交换精确量的输出代币。这是一个有趣的用例&#xff0c;可能并不常用&#xff0c;但仍有可能实现。 GitHub - XuHugo/solidit…

Golang实战:深入hash/crc64标准库的应用与技巧

Golang实战&#xff1a;深入hash/crc64标准库的应用与技巧 引言hash/crc64简介基本原理核心功能 环境准备安装Golang创建一个新的Golang项目引入hash/crc64包测试环境配置 hash/crc64的基本使用计算字符串的CRC64校验和计算文件的CRC64校验和 高级技巧与应用数据流和分块处理网…

Jmeter 配置说明之线程组

一、线程组介绍&#xff1a; 线程组元件是任何一个测试计划的开始点。在一个测试计划中的所有元件都必须在某个线程组下。所有的任务都是基于线程组&#xff1a; 通俗理解&#xff1a; 线程组&#xff1a;就是一个线程组&#xff0c;里面有若干个请求&#xff1b; 线程&am…

vue3.0 + ts + eslint报错:error Parsing error: ‘>‘ expected

eslint报错 这里加上对应的 eslint配置即可&#xff1a; parser: vue-eslint-parser, parserOptions: {parser: "typescript-eslint/parser",ecmaVersion: 2020,sourceType: module, }具体如下&#xff1a; module.exports {parser: vue-eslint-parser,parserOpti…

​马来语翻译中文去哪比较好?

据了解&#xff0c;马来语是马来西亚、文莱的官方语言&#xff0c;也是新加坡的官方语言之一&#xff0c;马来语跟印尼语是同一种语言&#xff0c;它在整个东南亚有着极大的影响力。如今在国内市场上&#xff0c;马来语翻译的需求也是供不应求&#xff0c;那么&#xff0c;如何…

【Go】三、Go指针

文章目录 1、指针2、说明 1、指针 &符号变量 就可以获取这个变量内存的地址*int 是一个指针类型 &#xff08;可以理解为 指向int类型的指针&#xff09; package main import("fmt" ) func main(){var age int 18//&符号变量 就可以获取这个变量内存的地…

第十五章 Nginx

一、Nginx 1.1 Nginx 相关概念 1.1.1 正向代理 正向代理类似一个跳板机&#xff0c;代理访问外部资源。 比如我们国内访问谷歌&#xff0c;直接访问访问不到&#xff0c;我们可以通过一个正向代理服务器&#xff0c;请求发到代理服&#xff0c;代理服务器能够访问谷歌&am…

TBSI模型论文解读及代码分析

前往我的主页以获得更好的阅读体验 简介 论文来源: Bridging Search Region Interaction With Template for RGB-T Tracking 现有的搜索算法通常会直接连接 RGB 和 T 模态搜索区域, 该方法存在大量冗余背景噪声. 而另一些方法从搜索帧中采样候选框, 对孤立的 RGB 框和 T 框进…

TongWeb7.0-8.0Java代码使用JMX获取应用通道端口

以下通过java代码实现获取TongWeb7.0/8.0应用通道端口使用到的JMX均为TongWeb自带的JMX功能。 一、TongWeb7.0 1、使用本地JMX获取应用通道端口 public String getTw7PortByLocalJmx() { try { MBeanServer beanServer ManagementFactory.getPlatformMBeanServer(); Set&l…

SOLIDWORKS二次开发参数化设计软件 慧德敏学

SOLIDWORKS参数化设计软件-SolidKits.AutoWorks专为规格变化多、变化规律强的产品开发&#xff0c;将变化规律集成到三维设计软件&#xff0c;通过一键点击实现自动化产品再设计&#xff0c;如智能选型、自动化修改产品属性、产品参数、产品状态、图纸更新、重命名、并自动打包…

LeetCode:300最长递增子序列 C语言

300. 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子…

小程序中使用less

在vscode中安装插件 找到左下角齿轮的设置&#xff0c;点击右边图标&#xff0c;进入“settings.json” 加上以下代码配置 "less.compile":{"outExt": ".wxss"}