Guía técnica para Text2Reward
Configuración del entorno
Para iniciar, crea un entorno Conda con Python 3.8:
conda create -n entorno_rl python=3.8
conda activate entorno_rl
Instala las dependencias necesarias, incluyendo PyTorch y las bibliotecas específicas del proyecto:
pip install torch==1.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install -r requirements.txt
pip install -e ./ManiSkill2
Resuelve problemas comunes de instalación con wheel:
pip install "wheel<0.40"
Descarga de recursos y datos
Configura el directorio de assets y descarga los datos de las tareas:
export MS2_ASSET_DIR=./datos_ms2
python -m mani_skill2.utils.download_asset OpenCabinetDoor-v1 -y
Generación de código de recompensa
Para generar nuevas funciones de recompensa, configura un segundo entorno:
conda create -n generador_rl python=3.8
conda activate generador_rl
pip install transformers
Asegúrate de establecer la variable de entorno OPENAI_API_KEY para el acceso a la API.
Monitoreo y registro
El proyecto soporta el registro de métricas de entrenamiento mediante TensorBoard y Weights & Biases (Wandb).
Solución de problemas comunes
Error de libGL.so.1
Si encuentras un error relacionado con libGL.so.1, instala las dependencias de OpenGL:
sudo apt-get update && sudo apt-get install -y libgl1
Error de libvulkan.so.1
Para resolver errores con Vulkan, ejecuta:
sudo apt-get install -y libvulkan1
Error de GL/glew.h
Este error indica falta de GLEW. Instala los paquetes necesarios:
sudo apt-get install libglew-dev libosmesa6-dev
Error de patchelf
Instala patchelf para corregir problemas de enlace dinámico:
conda install patchelf
Errores relacionados con CUDA
Problemas como CUBLAS_STATUS_NOT_INITIALIZED pueden deberse a controladores de GPU o configuraciones incorrectas. Verifica la instalación de NVIDIA drivers.
Errores de conexión con OpenAI API
Asegúrate de que la clave API sea válida y que haya conectividad a inetrnet. Reinicia la sesión si es necesario.
Archivos clave del proyecto
ppo.py
Este script implementa el entrenamiento PPO con soporte para funciones de recompensa personalizadas. La clase TaskWrapper extiende gym.Wrapper para agregar límites de pasos y lógica de recompensa densa.
Parámetros importantes:
reward_path: Ruta a un script Python que define una funcióncalculate_dense_rewardpara sobrescribir la recompensa por defecto.
Métodos de TaskWrapper:
reset(): Reinicia el contador de pasos y devuelve la observación inicial.step(action): Ejecuta una acción, devuelve la observación, recompensa, estado de terminación e información. La recompensa se calcula usando la función inyectada si está disponible.
zero_shot_exp.py
Script para experimentos de generación de código de recompensa en modo zero-shot. Utiliza modelos de lenguaje grandes (LLMs) como GPT-4 para producir funciones de recompensa a partir de descripciones en lenguaje natural.
Clase principal: RewardCodeGenerator
class RewardCodeGenerator:
def __init__(self, template, model_name="gpt-4", **params):
# Inicializa el generador con un template de prompt y modelo específico
self.template = template
self.model_name = model_name
self.params = params
El método generate(instruction, mapping_dict) toma una instrucción textual y un diccionario de mapeo para producir código genérico y específico para el entorno.
Tareas soportadas
El proyecto incluye tareas para robots como Franka Panda y robots móviles, por ejemplo:
LiftCube-v0: Levantar un cubo.OpenCabinetDoor-v1: Abrir una puerta de armario.
Estas tareas usan abstracciones de entorno ficticias para la generación de código, como tipos RigidObject o ArticulatedObject que no existen en el código base real.