1、腾讯“开悟”AI平台在TensorRT上的最佳实践腾讯AI Lab朱文熙|目录1. 开悟平台背景介绍2. 强化学习训练中的推理3. TensorRT最佳实践4. 总结|背景:游戏+AI开启人工智能的热潮开始围棋AI绝艺的研究2016.012017.03以绝艺身份亮相获得UEC冠军2017.04开始王者荣耀AI绝悟的研究2018.12以绝悟身份亮相战胜主播队2019.8王者世界冠军杯战胜职业联队DeepMind:Alphago战胜李世石OpenAI:Dota21V1 对战职业选手DeepMind: StarCraftII挑战职业选手2016.032017.082019.01OpenAI:Dota
2、25V5 战胜世界冠军OG2019.042019.08Microsoft:麻将天凤平台到十段 腾讯AI Lab对游戏AI的探索 业界对游戏AI的探索2019.07CMU+Facebook:德州六人桌战胜职业选手游戏模拟环境作为人工智能的研究验证环境,已形成广泛共识|腾讯开悟:以游戏为模拟环境,研究多智能体博弈的开放平台 以多智能体作为核心研究问题,依托腾讯王者荣耀模拟环境,结合算法、数据、算力优势,为学术研究人员提供AI研究应用探索平台 以游戏AI为切入,携手高校与研究机构共同推动多智能体研究发展,共同打造AI+游戏产学研新生态腾讯优势:AI + 游戏产学研一体化:带来多方价值定制化接口与工具
3、算力算法数据环境绝艺绝悟比赛课程建设标准联盟游戏AI开放平台高校游戏平台产业联盟+标准协议人才价值:融合内外科研力量,加速AI创新PR价值:扩大对外影响,商业价值:驱动AI+游戏新玩法孵化生态价值:手机+芯片+游戏+平台新生态AI驱动新玩法数据+环境手机厂商芯片厂商定制优化AI+游戏能力组件化王者荣耀AI lab腾讯Game Core腾讯作为少数兼顾AI与游戏的科技公司,深度定制、能力开放成为可能对内:建立统一的游戏AI快速接入平台对外:构建广泛影响的AI基础研究平台|开悟的核心功能:聚焦于王者荣耀这一款国民级游戏,将为AI研究者提供算法、数据(脱敏)、计算平台等多种资源服务支持开悟目前已包含
4、采集自王者荣耀游戏的 10+ 万局真实对战数据,包括游戏场景数据与执行指令数据;该数据集已经过匿名化处理,未来还将继续扩充。开悟已提供用于读取王者荣耀游戏场景和控制英雄行为的数据接口Gamecore API,让研究者可以快速便捷地测试自己的新算法和模型。开悟可为有需求的学术界研究者提供计算平台与算力资源,这些资源基于腾讯公司的云计算与大数据处理平台,可用于训练强化学习和模仿学习算法和模型。开悟已提供游戏对战工具和对局录像回放工具,这些工具基于 Linux 环境,让研究者可以在开发过程中轻松调试,即时有效地评估新算法和模型的性能表现。开悟网站平台灵活易用,包括强化训练、数据抽取、监督训练、推理服
5、务、对战管理、录像管理、入门指引七大板块,能为研究者优质高效的辅助管理服务。匿名的游戏数据集游戏核心集群计算平台评估工具综合服务开悟平台核心功能:全栈打通的AI+游戏实验平台|开悟平台2020年进展:提高研发效率,加强与高校之间的合作对外:为17所高校提供王者研究环境对内:实验成本降低50%,研发效率提30% 全球首个在MOBA类游戏做到全英雄职业水平的AI 王者监督学习实验时长:39h-4h 王者强化学习实验时长:14天-5天官网:http:/|目录1. 开悟平台背景介绍2. 强化学习训练中的推理3. TensorRT最佳实践4. 总结|王者荣耀“绝悟”AI|强化学习训练过程中推理对局对局1
6、对局2对局1agent1agent2actionactiongamecoreframestateframestate训练GPU训练GPU2训练GPU1样本池样本池样本池训练服务训练服务训练服务RL模型参数交换P2P模型同步模型同步updatesamples自对弈自对弈多机多卡强化训练多机多卡强化训练推理GPU对局1推理GPU2推理GPU1模型池TRTrefit推理推理Policy对手(a)Policy己方(a)|目录1. 开悟平台背景介绍2. 强化学习训练中的推理3. TensorRT最佳实践Refit优化图优化低效Op的改造新Op支持4.总结|TensorRT WorkflowLoad Pl
7、uginGraph optimization Serialize engineLoad plugin &Deserialize enginePrepare inputInference(execute ops)Process outputRefit(prepare weight)Builder Runtime Kernel autotuningMemory optimization|Refit减少TRT rebuild开销TRT要求Weight固定1.一旦Weight发生变化需要重新build engine;2.Build engine过程将会耗时数分钟。引入Refit功能1.使用TRT插件开
8、发具有Refit功能的Op:将Weight和Input一起传入作为运行时输入;2.运行时只需传入对应更新后的Weight,无需rebuild engine。Load plugin &Deserialize enginePrepare inputInference(execute ops)Process outputRefit(prepare weight)Runtime |Refit TRT原生Refit存在问题不兼容ONNX parser1.目前不支持LSTM Refit;2.TF weight name 到 TRT layer名之间的name 匹配存在问题。开悟的解决方案1.自行开发par
9、ser:利用TRT Plugin和自定义名称匹配实现lstm的refit;2.与Nvidia合作增强:自动化TF-ONNX-TRT过程中的name匹配,推进lstm的refit的支持。self/embed/spa_embed/gridnet_enc/small/conv1/Conv2D(unnamed layer* 773)ConvolutionTensorflow weight nameTensorRT weight name不匹配|图优化 - dilated conv优化Tensorflow中dilated conv被拆成5个op来实现ONNX graph从Tensorflow graph
10、出发,进一步拆成11个op来实现;但实际上TensorRT支持dilated conv算子优化方案:修改ONNX graph,将这11个Op替换成dilated conv|图优化 - dilated conv优化55470500BS=32BS=64BS=128优化效果 (MS)TensorRT dilated conv (11 Op)TensorRT dilated conv (1 Op)|图优化copyPackedKernel开销96.4%的时间花费在copyPackedKernel上copyPackedKernel来自split操作;split将
11、会生成30个新的Tensor,并把输出结果拷贝到这些Tensor,这些拷贝操作即为copyPackedKernel;|图优化消除copyPackedKernel将Split + Concat转化为等价的Transpose + Reshape:优化后:copyPackedKernel降低到了合理的比例|图优化消除copyPackedKernel800单次推理时间消除copyPackedKernel后性能提升 (ms)Split + ConcatTranspose + Resize75X|优化低效OPResizeBilinearResizeBilinea
12、rKernel是耗时最多的层每个block只有32个thread,导致只有50%的Theoreticaloccupancy|优化低效OPResizeBilinear3.520.9800.511.522.533.54BS=32KERNEL时间对比 (MS)TensorRT原始ResizeBilinear实现改进后的ResizeBilinear实现3000120140BS=32BS=64BS=128单次推理时间对比 (MS)TensorRT原始ResizeBilinear实现改进后的ResizeBilinear实现用plugin实现ResizeBilin
13、ear,使用(16,16)的block大小,优化效果如下:|优化低效OPEmbedding Lookup优化前:|优化低效OPEmbedding Lookup升级plugin基类:实现回调函数,禁用broadcast:051015202530ms推理性能对比改进前改进后1.4X|优化低效OPones_like优化前:大量”tensor_elementwise_kernel”|优化低效OPones_like优化后:|优化低效OPones_like055优化前后性能对比 (MS)TensorRT原生ones_likePlugin优化1.5x|新的Op类型Scatter/Gather/One-Hotgather_ndhttps:/ 开悟平台背景介绍2. 强化学习训练中的推理3. TensorRT最佳实践4. 总结|总结与展望TensorRT运行时性能分析执行图算子引入Refit机制手工修改计算图结构Build Engine优化低效算子支持新算子ONNX Parser优化|Q&AQ&A|ThankThank you!you!