py_functional.py — Python 通用函数式工具¶
文件路径: verl/utils/py_functional.py
文件概述¶
py_functional.py 提供纯 Python 的工具函数,不依赖 PyTorch 或其他深度学习库。主要处理嵌套数据结构的递归转换。
核心函数详解¶
1. 嵌套值转列表¶
def convert_nested_value_to_list_recursive(data):
"""递归地将嵌套结构中的 numpy 数组和 pandas Series 转换为 Python list"""
if isinstance(data, np.ndarray):
return [convert_nested_value_to_list_recursive(item) for item in data.tolist()]
elif isinstance(data, dict):
return {k: convert_nested_value_to_list_recursive(v) for k, v in data.items()}
elif isinstance(data, list):
return [convert_nested_value_to_list_recursive(item) for item in data]
return data
这个函数解决了从 Parquet 文件读取数据时,pandas 可能将嵌套列表读成 numpy 数组的问题。Tokenizer 通常期望 Python 原生 list 作为输入。
2. 嵌套字典展平¶
核心函数列表¶
| 函数 | 说明 |
|---|---|
convert_nested_value_to_list_recursive() |
递归转换嵌套结构为 list |
union_two_dict() |
合并字典并累加值 |
与其他模块的关系¶
dataset/rl_dataset.py和dataset/multiturn_sft_dataset.py用它处理 Parquet 读取的数据- 不依赖其他 verl 模块
小结¶
虽然代码量小,但 py_functional.py 解决了数据管道中常见的类型兼容问题。