您好,我最近正在尝试将TLM应用到NVIDIA Jetson AGX Xavier这个嵌入式设备上,并希望通过微调来获得针对该平台的优化模型。
在此过程中遇到了一些困惑,想请教几点小问题。
我的操作与观察:
1、尝试使用Jetson原生任务: 我第一在Jetson设备上,使用 –target=nvidia/jetson-agx-xavier 成功运行了 dump_network_info.py 和 dump_programs.py,生成了Jetson专属的任务信息和原始程序库。
2、生成失败: 接着,我使用这些Jetson原生的任务草图(sketches)作为输入,并尝试用您项目仓库中预训练好的、基于V100的模型(clm_gen_best_v100)来为Jetson生成张量程序。但我发现,模型生成的绝大部分优化方案(states)都被TVM后端判定为无效,如日志所示:
ret array size: 0
Internal error: All states are invalid.
ret array size: 0
Internal error: All states are invalid.
ret array size: 0
Internal error: All states are invalid.
ret array size: 0
Internal error: All states are invalid.
ret array size: 0
Internal error: All states are invalid.
31%|█████████████████████████▎ | 68/220 [22:29<41:20, 16.32s/it]ret array size: 27, 27, 27
31%|█████████████████████████▋ | 69/220 [22:40<37:05, 14.74s/it]
ret array size: 7, 6, 6
ret array size: 6, 6, 6
ret array size: 6, 6, 6
32%|██████████████████████████ | 70/220 [23:00<40:40, 16.27s/it]
ret array size: 28, 27, 27
32%|██████████████████████████▍
出现了许多报错。虽然有极少数成功案例,但总体来看,V100模型无法很好地理解Jetson原生的任务描述。
3、对比实验:
作为对比,我也进行了另一个实验:我使用了为V100生成的任务草图作为输入,用同一个clm_gen_best_v100模型,但将生成目标设为–target=nvidia/jetson-agx-xavier。在这种“跨平台”生成模式下,模型可以顺利地生成大量有效的张量程序。
我的核心困惑:
基于以上观察,我的核心困惑是关于为新硬件(Jetson)收集微调数据的正确方法论:
① “跨平台”生成的数据是否可用于微调?
我在实验3中,通过“V100的任务草图 -> V100的模型 -> 为Jetson生成程序”这一流程,成功获得了大量可以在Jetson上测量的程序。如果我对这些程序在Jetson上进行测量,得到带有真实latency的数据。请问,这批数据可以被用来微调原始的clm_gen_best_v100模型吗? 这是一种合理且被推荐的微调路径吗?还是说,由于它的“问题(草图)”源自V100,所以它对于教会模型理解Jetson原生的任务协助不大?
② 如果必须使用原生数据,应如何“启动”优化流程?
如果方法①不可取,我们必须使用Jetson原生生成的任务数据(如实验1)。但既然V100模型无法有效处理这些原生数据,导致All states are invalid,那么我应该如何**“启动(bootstrap)”**这个数据收集的“鸡生蛋,蛋生鸡”的循环呢?我是否必须从零开始,先为Jetson创建一个全新的词汇表(tokenizer),然后再预训练一个TLM-base模型?还是有更巧妙的“冷启动”方法?
由于手头的卡不多,从TLM-base开始训练,可能会有些费时,所以想请教一下。
再次感谢您的宝贵时间和卓越工作!期待您的解答。
暂无评论内容