GenSim: 通过大型语言模型生成机器人模拟任务
Lirui Wang, Yiyang Ling, Zhecheng Yuan, Mohit Shridhar, Chen Bao, Yuzhe Qin, Bailin Wang, Huazhe Xu, Xiaolong Wang
项目页面 | Arxiv | Gradio 演示 | Huggingface 数据集 | 微调 Code-LLama 模型 | GPTs
该仓库探讨了使用 LLM 代码生成流水线来编写模拟环境和专家目标,以增强多样化的模拟任务。强烈建议查看 Gradio 演示 和 GPTs。
⚙️ 安装
pip install -r requirements.txt
python setup.py develop
export GENSIM_ROOT=$(pwd)
export OPENAI_KEY=YOUR KEY
。我们使用 OpenAI 的 GPT-4 作为语言模型。您需要有 OpenAI API 密钥才能运行 GenSim 的任务生成。您可以从这里获取一个。
🚶开始
安装过程完成后,您可以运行:
# 基本自下而上的提示
python gensim/run_simulation.py disp=True prompt_folder=vanilla_task_generation_prompt_simple
# 自下而上的模板生成
python gensim/run_simulation.py disp=True prompt_folder=bottomup_task_generation_prompt save_memory=True load_memory=True task_description_candidate_num=10 use_template=True
# 自上而下的任务生成
python gensim/run_simulation.py disp=True prompt_folder=topdown_task_generation_prompt save_memory=True load_memory=True task_description_candidate_num=10 use_template=True target_task_name="build-house"
# 基于任务的连锁思考生成
python gensim/run_simulation.py disp=True prompt_folder=topdown_chain_of_thought_prompt save_memory=True load_memory=True task_description_candidate_num=10 use_template=True target_task_name="build-car"
💾 添加和删除任务
- 要删除一个任务(删除其代码并从任务和任务代码缓冲区中移除),使用
python misc/purge_task.py -f color-sequenced-block-insertion
- 要添加一个任务(提取任务描述以添加到缓冲区),使用
python misc/add_task_from_code.py -f ball_on_box_on_container
🤖 LLM 生成的任务使用
- 所有生成的任务应该已经自动导入到
cliport/generated_tasks
目录中。 - 设置任务名称,然后使用
demo.py
进行可视化。例如,python cliport/demos.py n=200 task=build-car mode=test disp=True
。 - 以下是从头开始训练的指南(更多详细信息请见 cliport)。所有任务都遵循四阶段工作流程:
- 使用
demos.py
生成train
,val
,test
数据集 - 使用
train.py
训练代理 - 使用
eval.py
进行验证,以在val
任务中找到最优检查点,并保存*val-results.json
- 使用
eval.py
在test
任务中评估*val-results.json
中的最优检查点
- 使用
🎛️ LLM 微调
-
使用
python gensim/prepare_finetune_gpt.py
准备数据。发布的数据集 这里 -
使用 openai api 微调
openai api fine_tunes.create --training_file output/finetune_data_prepared.jsonl --model davinci --suffix 'GenSim'
-
使用
python gensim/evaluate_finetune_model.py +target_task=build-car +target_model=davinci:ft-mit-cal:gensim-2023-08-06-16-00-56
进行评估 -
使用
python gensim/run_simulation.py disp=True prompt_folder=topdown_task_generation_prompt_simple load_memory=True task_description_candidate_num=10 use_template=True target_task_name="build-house" gpt_model=gpt-3.5-turbo-16k trials=3
进行对比 -
使用
python gensim/run_simulation.py disp=True prompt_folder=topdown_task_generation_prompt_simple_singleprompt load_memory=True task_description_candidate_num=10 target_task_name="build-house" gpt_model=gpt-3.5-turbo-16k
进行对比 -
turbo 微调模型。
python gensim/evaluate_finetune_model.py +target_task=build-car +target_model=ft:gpt-3.5-turbo-0613: trials=3 disp=True
-
使用 hugging-face transformer 库微调 Code-LLAMA 这里
-
离线评估:
python -m gensim.evaluate_finetune_model_offline model_output_dir=after_finetune_CodeLlama-13b-Instruct-hf_fewshot_False_epoch_10_0
🤖 策略基准
- 请注意,GenSim 生成的 100 多个任务可以用于多任务策略训练算法的基准测试。有关基准设置的列表,请参见
scripts/task_list/GPT_*.json
。预训练的多任务模型可以从这里找到。 - 生成多任务演示。例如,运行
bash scripts/generate_datasets.sh data 'align-box-corner assembling-kits block-insertion'
- 单任务训练
sh scripts/train_test_multi_task.sh data "[align-rope,align-box-corner]
- 多任务训练
sh scripts/train_test_single_task.sh data align-box-corner
✅ 注意
- 温度
0.5-0.8
是多样性的好范围,0.0-0.2
用于稳定结果。 - 生成流水线会打印出有关编译、运行时间、任务设计和多样性分数的统计信息。请注意,这些指标取决于 LLM 试图生成的任务复杂性。
- 核心提示和代码生成脚本在
gensim
文件夹中,训练和任务脚本在cliport
文件夹中。 prompts/
文件夹存储了不同种类的提示以获取所需的环境。每个文件夹包含一系列提示以及一个元数据文件。prompts/data
存储了基础任务库和生成的任务库。- GPT 生成的任务存储在
generated_tasks/
文件夹中。使用demo.py
与它们互动。cliport/demos_gpt4.py
是一个一体化提示脚本,可以转换为 ipython notebook。 - 原始文本输出保存在
output/output_stats
文件夹中,图形结果保存在output/output_figures
文件夹中,策略评估结果保存在output/cliport_output
文件夹中。 - 要调试生成的代码,请手动复制粘贴
generated_task.py
,然后运行python cliport/demos.py n=50 task=gen-task disp=True
- 这个版本的 cliport 应该支持
batchsize>1
,并且可以与较新的 pytorch 和 pytorch lightning 版本一起运行。 - 请使用 Github 问题跟踪器报告错误。其他问题请联系 Lirui Wang
- Blender 渲染
python cliport/demos.py n=310 task=align-box-corner mode=test disp=True +record.blender_render=True record.save_video=True
引用
如果您在研究中发现 GenSim 有用,请考虑引用:
@inproceedings{wang2023gen,
author = {Lirui Wang and Yiyang Ling and Zhecheng Yuan and Mohit Shridhar and Chen Bao and Yuzhe Qin and Bailin Wang and Huazhe Xu and Xiaolong Wang},
title = {GenSim: Generating Robotic Simulation Tasks via Large Language Models},
booktitle = {Arxiv},
year = {2023}
}