i4h-workflow-dataset-mimic

Par nvidia · skills

Étendre un enregistrement HDF5 en clonant des trajectoires avec du bruit sur les actions/états. À utiliser lorsqu'on demande d'imiter, d'étendre ou d'augmenter un dataset ; pas pour enregistrer de nouvelles démos (utiliser [[i4h-workflow-dataset-teleop]]).

npx skills add https://github.com/nvidia/skills --skill i4h-workflow-dataset-mimic

i4h Workflow — Mimic Dataset

Purpose

Étendre un enregistrement HDF5 en répliquant des trajectoires avec un faible bruit sur l'action et l'état. Utiliser quand l'utilisateur demande de simuler, étendre ou augmenter un dataset sans enregistrer de nouveaux épisodes. Si le même prompt demande aussi de visualiser le dataset, terminer d'abord la simulation, puis composer [[i4h-workflow-dataset-convert]] et [[i4h-lerobot-viz]] sur la sortie de la simulation.

Base Code

Ces étapes pilotent le code de base des i4h-workflows (l'arborescence workflows/agentic/). Pour réutiliser un checkout existant, définir I4H_WORKFLOWS à son chemin (aucun clonage n'a lieu). Sinon, cela résout le repo courant, ou clone vers ~/i4h-workflows — choisir ce défaut sans demander. Exécuter chaque commande ci-dessous depuis la racine résolue :

# Resolve the i4h-workflows base code (provides workflows/agentic/).
ROOT="${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>/dev/null)}"
if [ ! -d "$ROOT/workflows/agentic" ]; then
  ROOT="${I4H_WORKFLOWS:-$HOME/i4h-workflows}"
  [ -d "$ROOT/workflows/agentic" ] || git clone https://github.com/isaac-for-healthcare/i4h-workflows "$ROOT"
fi
export I4H_WORKFLOWS="$ROOT"; cd "$ROOT"

Basics

  • Env config (source de vérité) : workflows/agentic/config/environments/<env>.yaml définit le robot <env> et la tâche sur lesquels les trajectoires simulées sont rejouées.
  • La simulation perturbe l'action/l'état, pas les visuels.
  • Le --include-source par défaut conserve les démos originales dans la sortie.
  • Dans un workflow chaîné après teleop/validate, utiliser le HDF5 produit par cette chaîne. Ne pas revenir silencieusement à un enregistrement plus ancien du même env si l'enregistrement le plus récent/courant est vide ou a échoué ; arrêter et signaler que les démos source manquent.
  • Compter les épisodes HDF5 avec le venv du workflow, pas le Python système (h5py peut ne pas être installé globalement).

Run

Exécuter les étapes ci-dessous dans l'ordre. Chaque étape est un appel bash distinct ; les variables persistent dans la session tmux de l'agent local.

Step 1 — setup and resolve input HDF5

REPO_ROOT="${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>/dev/null)}"; [ -d "$REPO_ROOT/workflows/agentic" ] || REPO_ROOT="$HOME/i4h-workflows"
ENV_ID=scissor_pick_and_place
RUNS_ROOT="${REPO_ROOT}/workflows/agentic/runs"

# Point IN at a real recording to expand (absolute path). Recordings come from teleop or
# validate (which writes data/verify.hdf5 under each runs/eval_* dir). List candidates newest-first:
#   find "${RUNS_ROOT}" -name '*.hdf5' -printf '%TY-%Tm-%Td %TH:%TM  %p\n' | sort -r | head
IN="${IN:-}"
if [ ! -f "${IN}" ]; then
  echo "mimic: set IN to an existing .hdf5 (got '${IN:-<unset>}'). Candidates:" >&2
  find "${RUNS_ROOT}" -name '*.hdf5' -printf '%TY-%Tm-%Td %TH:%TM  %p\n' 2>/dev/null | sort -r | head
  exit 1
fi

# Verify the selected input is a real recording before mimic. A tiny HDF5 or
# `0/N episodes succeeded` teleop artifact is not usable source data.
"${REPO_ROOT}/workflows/agentic/mimic/.venv/bin/python" - "${IN}" <<'PY'
import h5py
import sys
path = sys.argv[1]
with h5py.File(path, "r") as f:
    count = len(f["data"]) if "data" in f else 0
print(f"source episodes: {count}")
if count <= 0:
    raise SystemExit("mimic: input HDF5 has no episodes; record successful demos first")
PY

RUN_DIR="${RUNS_ROOT}/mimic_${ENV_ID}_$(date +%Y%m%d_%H%M%S)"
mkdir -p "${RUN_DIR}/data" "${RUN_DIR}/logs"
ln -sfn "${RUN_DIR}" "${RUNS_ROOT}/.latest"
OUT="${RUN_DIR}/data/demo_mimic.hdf5"

Lors de la résolution de « mon dataset » à partir de prompts antérieurs, inspecter les candidats du plus récent au plus ancien et préférer le HDF5 teleop/validate le plus récent et réussi de la chaîne courante. Si le HDF5 le plus récent pour l'env cible a 0 épisodes, ne pas revenir à une exécution plus ancienne à moins que l'utilisateur ne demande explicitement de réutiliser ce dataset plus ancien.

Step 2 — mimic expand

"${REPO_ROOT}/workflows/agentic/mimic/run.sh" --env "${ENV_ID}" \
  --input "${IN}" \
  --output "${OUT}" \
  --episodes 3 \
  --noise-std 0.01 \
  --include-source \
  --overwrite \
  2>&1 | tee "${RUN_DIR}/logs/mimic.log"

Verify

uv --directory "${REPO_ROOT}/workflows/agentic/mimic" run python -c \
  "import h5py; print('episodes:', len(h5py.File('${OUT}','r')['data']))"

Confirmer que le nombre d'épisodes de sortie égale les démos source plus --episodes. Confirmer aussi que le nombre d'épisodes d'entrée était supérieur à zéro ; la sortie de simulation depuis une source vide est invalide.

Si le prompt inclut une visualisation (par exemple, « Simuler 3 épisodes de plus et visualiser mon dataset »), continuer après cette étape de vérification :

  1. Charger [[i4h-workflow-dataset-convert]] et définir HDF5_PATH="${OUT}" pour que le HDF5 augmenté soit converti en LeRobot avec --video-codec h264.
  2. Charger [[i4h-lerobot-viz]] et définir DATASET_DIR au répertoire du dataset converti (${HF_LEROBOT_HOME}/local/${ENV_ID} par défaut).
  3. Signaler à la fois le HDF5 augmenté et l'URL du visualiseur.

Prerequisites

  • Workflow configuré via [[i4h-workflow-setup]] (le .venv doit exister).
  • Un enregistrement HDF5 d'entrée existant (--input).
  • L'ID env qui a produit l'enregistrement.

Limitations

  • Perturbe l'action/l'état uniquement, pas les visuels.
  • Augmente un enregistrement existant plutôt que d'enregistrer de nouveaux épisodes.
  • Les dimensions d'état/action de sortie doivent correspondre à la source.

Troubleshooting

  • Erreur : .venv introuvable / mimic ne se lance pas - Cause : workflow non configuré. Correction : exécuter [[i4h-workflow-setup]] en premier.
  • Erreur : enregistrement d'entrée introuvable - Cause : chemin HDF5 incorrect ou manquant --input. Correction : pointer vers le fichier d'enregistrement existant.
  • Erreur : HDF5 d'entrée n'a pas d'épisodes - Cause : teleop a été lancé mais aucun épisode réussi n'a été enregistré. Correction : enregistrer d'abord les démos source réussies ; ne pas substituer une exécution plus ancienne sans direction explicite de l'utilisateur.
  • Erreur : la sortie existe déjà / écriture refusée - Cause : le chemin --output est occupé. Correction : choisir un nouveau chemin ou passer --overwrite.
  • Erreur : erreur de correspondance de dimension état/action à l'inspection - Cause : --env diffère de l'env qui a produit l'entrée. Correction : utiliser le même ID env que l'enregistrement source.

Final Response

Signaler le chemin d'entrée, le chemin de sortie, le nombre d'épisodes générés, le bruit std, si les démos source ont été incluses, et l'URL du visualiseur si la visualisation a été demandée.

Skills similaires