使用NVIDIA DALI时Pipeline构建异常及run报错的技术求助
解决DALI管道构建错误的方案
问题根源
你遇到的两个问题本质是对DALI pipeline_def装饰器创建的管道实例的build()方法理解有误:
- 直接调用
pipe.run()报错,是因为管道未完成构建初始化 - 链式调用
.build()后得到None,是因为build()方法是原地执行构建操作,不会返回新的管道对象,链式赋值会把None赋给pipe变量
正确实现方式
方式1:先创建实例,再显式调用build
修改main函数,分两步操作:
def main(): # 创建管道实例 pipe = simple_pipeline(batch_size=max_batch_size, num_threads=1, device_id=0) # 原地构建管道(无返回值) pipe.build() # 执行管道 pipe_out = pipe.run()
方式2:创建实例时自动构建
利用pipeline_def的build参数,在实例化时自动完成构建:
def main(): # 创建实例时指定build=True,自动完成构建 pipe = simple_pipeline(batch_size=max_batch_size, num_threads=1, device_id=0, build=True) pipe_out = pipe.run()
验证说明
两种方式都能正确完成管道构建并执行run()方法,避免RuntimeError和None赋值问题。
内容的提问来源于stack exchange,提问作者Carlo
相关产品推荐
相关产品推荐

