《火山引擎:基于 Ray 的大模型离线推理(2023)(23页).pdf》由会员分享,可在线阅读,更多相关《火山引擎:基于 Ray 的大模型离线推理(2023)(23页).pdf(23页珍藏版)》请在三个皮匠报告上搜索。
1、2023/3/271基于 Ray 的大模型离线推理王万兴火山引擎资深研发工程师22.使用 Ray 构建大模型推理框架3.Ray 云原生部署实践1.大模型离线推理的关键挑战2大模型离线推理的关键挑战大模型离线推理4大模型离线推理(Batch 推理),是指在具有数十亿至数千亿参数的大规模模型上进行分布式计算推理的过程大模型离线推理的关键挑战-GPU Memory Wall 模型参数量越来越大 算力和需求gap越来越大 需要做模型切分模型切分6 支持更大模型 降低成本 空分复用大模型离线推理的关键挑战-分布式调度7异构资源调度在在 CPUCPU上做上做数据的摄取和处理数据的摄取和处理在在 GPUGP
2、U上做推理过程上做推理过程弹性资源调度较快的较快的 stagestage较慢的较慢的 大模型离线推理的关键挑战-性能8 吞吐 GPU使用率例子:Vit+Albert9使用 Ray 构建大模型推理框架Ray 简介11Ray from RISElab UC BerkeleyAnyscaleGitHub 24k Uber/OpenAI/Ant/ByteDanceChatGPTChatGPT is powered is powered byby RayRay!high-level libraries whichenable simple scaling ofAI workloadsa low-leve
3、l distributedcomputing frameworkwith a concise core,Python-first API强化学习模型 Serve超参优化模型训练ML 数据处理Ray 简介12Head/Worker 节点RayletDriverWorkerRay v2 ARay 简介13ray.remoteclass Counter:def _init_(self):self.i=0def get(self):return self.idef incr(self,value):self.i+=value c=Counter.remote()c.incr.remote(1)prin
4、t(ray.get(c.get.remote()ray.remotedef sum(matrix):return np.sum(matrix)#Call the task with a literal argument value.print(ray.get(sum.remote(np.ones(100,100)#Put a large array into the object store.matrix_ref=ray.put(np.ones(1000,1000)print(ray.get(sum.remote(matrix_ref)Ray Core API编程from ray import
5、 train from ray.train.torch import TorchTrainerclass NeuralNetwork(nn.Module):def _init_(self):super(NeuralNetwork,self)._init_()self.layer1=nn.Linear(input_size,layer_size)self.relu=nn.ReLU()self.layer2=nn.Linear(layer_size,output_size)def forward(self,input):return self.layer2(self.relu(self.layer
6、1(input)def train_func_distributed():optimizer=optim.SGD(model.parameters(),lr=0.1)for epoch in range(num_epochs):optimizer.zero_grad()loss.backward()optimizer.step()trainer=TorchTrainer(train_func_distributed,scaling_config=ScalingConfig(num_workers=4)results=trainer.fit()Ray library API 编程定义actor创
7、建actor并调用方法定义task创建task并调用使用object定义模型进行训练使用 Ray 构建大模型推理框架 Ray Datasets14强化学习模型 Serve超参优化模型训练ML数据处理为什么选择 Ray Datasets?Ray 上 ML Pipeline 读取和处理数据的标准方式 提供了丰富的 Datasource 和数据转换read_parquet/read_numpy/read_tfrecords/from_huggingfacefrom_spark/from_dask/from_mars/from_pandasmap/map_batches/sort/repartitio
8、n/random_shuffle 可以做通用的并行计算,特别是 batch 推理 支持 pipeline 模式MLML数据处理数据处理使用 Ray 构建大模型推理框架 v1-Based on native Ray Dataset Pipeline15使用 Ray Datasets Pipeline相比于 Spark 等引擎,Ray Datasets Pipeline可显著提升计算效率Ray vs Sparkclass ModelLayers1:def _init_(self):.def forward(self,data:Listtuple):._call_=forwardclass Mode
9、lLayers2:def _init_(self):.def forward(self,data:Listtuple):._call_=forwardpl=ray.data.from_items(reocrds).window(blocks_per_window)pl.map_batches(ModelLayers1,compute=actors,num_cpus=1).map_batches(ModelLayers2,compute=actors,num_gpus=1).write_json(/tmp/results)使用 Ray 构建大模型推理框架 v1-Based on native R
10、ay Dataset Pipeline16每个 window 创建销毁 ActorPool数据的 IO 和推理计算没有并行,GPU 利用率低缺乏弹性能力,在 stage 计算速度差异较大时存在等待浪费资源的情况参数调试困难缺少容错能力和推测执行能力存在的问题异构资源调度(num_cpus/num_gpus)并行流水线解决的问题使用 Ray 构建大模型推理框架 v2-Streaming execution semantics inRay Dataset Pipeline17pl=ray.data.from_items(reocrds).window(blocks_per_window)pl.fl
11、at_map_batches(ModelLayers1,compute=StableActorPool(num_gpus=1).map_batches(ModelLayers2,compute=StableActorPool(num_gpus=1).write_json(/tmp/results)StableActorPool 避免重复创建开销Actor 侧多线程,IO 和推理计算并行,提升GPU 利用率Stage 间流式传递 blocklist ref,支持反压,避免数据过多 OOMActorPool 支持弹性,负载高的 stage 获得更多资源,加速执行增加 flat_map_batche
12、s API支持容错和推测执行(进行中)使用 Ray 构建大模型推理框架 v2-v2.3 社区合作18Native pipelining support in Ray Datasets REPRay 云原生部署实践Ray 云原生部署-KubeRay20KubeRayRay operatorRay operator:creates/updates/deletesRay Clusters in k8s管理 ray cluster 生命周期KubeRay 是一个 Kubernetes 上的 Ray 部署解决方案https:/ GitHub stars130 forksRay2.3 正式集成Ray 云原生部署-KubeR总结和展望222.使用 Ray 构建大模型推理框架3.Ray 云原生部署实践1.大模型离线推理的关键挑战