網站多久備案一次谷歌seo外鏈平臺
前言
25年2.4日,幾個月前推出π0的公司Physical Intelligence (π)宣布正式開源π0及π0-FAST,如之前所介紹的,他們對用超過 10,000 小時的機器人數(shù)據(jù)進行了預訓練
該GitHub代碼倉庫「?π0及π0-FAST的GitHub地址:github.com/Physical-Intelligence/openpi」包括4個方面:簡言之,就是π0本身的代碼和權重、特定平臺上特定任務的微調checkpoint、推理代碼、微調代碼
第一部分?如何基于各種開源數(shù)據(jù)集微調π0
1.1 π0及π0-FAST對外開源的具體內容
1.1.1 開源基礎模型π0及π0-FAST,可自行微調
- π0基礎模型的代碼及權重
可用于微調的擴散π0「標準的預訓練π 0模型,該模型在 OXE 和他們的 7 個機器人平臺上進行訓練」
其對應的checkpoint路徑為:s3://openpi-assets/checkpoints/pi0_base - π0-FAST基礎模型的代碼及權重
可用于微調的π0_FAST——基于FAST分詞器的自回歸模型
該模型使用FAST?tokenizer通過自回歸離散化實現(xiàn)控制
它提供了更好的語言跟蹤性能,但推理成本更高(根據(jù)他們的經驗,大約高出 4-5 倍),如果您更喜歡使用discretization而不是流匹配,這是一個不錯的選擇
其對應的checkpoint路徑為:s3://openpi-assets/checkpoints/pi0_fast_base
1.1.2 已經微調好的模型 可直接推理:π0 DROID/π0 ALOHA/π0 Libero
且他們還提供了專門為ALOHA和DROID平臺上一些簡單任務做了微調的checkpoint,相當于在ALOHA 和 DROID 收集的相對較小的數(shù)據(jù)集上進行了微調
即several checkpoints that are fine-tuned for a few simple tasks on a few widely available platforms such as ALOHA and DROID,當然,它們可能無法推廣到您的特定設置
- π0 DROID:在DROID 數(shù)據(jù)集上微調過的擴散π0
DROID數(shù)據(jù)集由 Franka 機械臂在不同環(huán)境中執(zhí)行的不同任務組成的開源數(shù)據(jù)集,且他們通過視頻展示了 openpi 在訓練數(shù)據(jù)中從未見過的環(huán)境中運行,這些環(huán)境遍布世界各地,包括蒙特利爾大學、華盛頓大學、韓國科學技術研究院等
其對應的checkpoint路徑為:s3://openpi-assets/checkpoints/pi0_droid
推理速度比π0-FAST-DROID快,但可能不遵循語言命令 - π0-FAST DROID:在DROID數(shù)據(jù)集微調過的π0-FAST
可以在DROID機器人平臺上的新場景中執(zhí)行各種簡單的零樣本桌面操控任務,例如“從烤面包機中取出面包”任務
其對應的checkpoint路徑為:s3://openpi-assets/checkpoints/pi0_fast_droid - π0 ALOHA
根據(jù) ALOHA(適合靈巧操作的低成本雙臂系統(tǒng)) 數(shù)據(jù)進行了微調,可以在ALOHA機器人平臺上進行毛巾折疊、食物舀取和其他任務,相當于提供了一套針對 ALOHA 平臺上的任務進行微調的檢查點「這些檢查點可能對整體機器人設置非常敏感,但能夠在完全未出現(xiàn)在訓練數(shù)據(jù)中的全新 ALOHA 站點上運行它們」
不同任務對應的不同checkpoint路徑分別為
折疊毛巾:s3://openpi-assets/checkpoints/pi0_aloha_towel
從容器中取出食物:s3://openpi-assets/checkpoints/pi0_aloha_tupperware
打開筆帽:s3://openpi-assets/checkpoints/pi0_aloha_pen_uncap - π0 Libero
此檢查點針對 Libero 基準進行了微調,并且可以在 Libero 任務上進行開箱即用的評估
1.1.3 模型推理與私有數(shù)據(jù)自行微調
他們還開源了在多個顯示世界和仿真機器人平臺上推理運行的示例代碼(example code to run inference on several real-world and simulated robot platforms)
?以下是跑π0-FAST-DROID模型的預訓練檢查點
from openpi.training import config
from openpi.policies import policy_config
from openpi.shared import downloadconfig = config.get_config("pi0_fast_droid")
checkpoint_dir = download.maybe_download("s3://openpi-assets/checkpoints/pi0_fast_droid")# Create a trained policy.
policy = policy_config.create_trained_policy(config, checkpoint_dir)# Run inference on a dummy example.
example = {"observation/exterior_image_1_left": ...,"observation/wrist_image_left": ...,..."prompt": "pick up the fork"
}
action_chunk = policy.infer(example)["actions"]
且也可以在示例筆記本中測試這一點,他們還提供了在DROID和ALOHA機器人上運行預先訓練的檢查點的推理的詳細分步示例
此外
- 遠程推理:他們提供了示例和代碼,用于遠程運行模型推理,詳見遠程運行π0模型
模型可以在不同的服務器上運行,并通過 websocket 連接將操作傳輸?shù)綑C器人。這樣可以輕松在機器人外使用更強大的 GPU,并將機器人和策略環(huán)境分開
要啟動遠程策略服務器,您只需運行以下命令:
其中,參數(shù)env指定哪個π0 checkpoint 應該被加載,比如是ALOHA還是LIBERO。在后臺,這個腳本將執(zhí)行如下命令,你可以使用它來啟動策略服務器,例如用于你自己訓練的檢查點——這里是 DROID 環(huán)境的一個示例uv run scripts/serve_policy.py --env=[DROID | ALOHA | LIBERO]
其中,config這將啟動一個策略服務器,該服務器將執(zhí)行和參數(shù)指定的策略dir。該策略將在指定端口(默認值:8000)上執(zhí)行uv run scripts/serve_policy.py policy:checkpoint --policy.config=pi0_fast_droid --policy.dir=s3://openpi-assets/checkpoints/pi0_fast_droid
- 無需機器人即可測試推理:提供無需機器人即可測試推理的腳本。此腳本將生成隨機觀察并使用模型運行推理。有關更多詳細信息,請參閱此處
1.2 基于自己的數(shù)據(jù)集微調π0基礎模型
1.2.1?利用Libero數(shù)據(jù)集微調π0基礎模型的三個步驟
此外,他們還提供了用于根據(jù)用戶自身任務和平臺微調π0的代碼(code for fine-tuning the base π0 model for your own tasks and platforms),這個微調π0的代碼 個人覺得很有價值,且huggingface上有相應的pytorch接口
Physical Intelligence (π)認為,1 到 20 小時的數(shù)據(jù)足以微調各種任務,具體而言,如果想利用自己的數(shù)據(jù)上微調π0基礎模型,只需以下三個步驟即可:
- 將Libero數(shù)據(jù)集轉換為LeRobot數(shù)據(jù)集v2.0格式
作者提供了一個腳本convert_libero_data_to_lerobot.py「下一小節(jié),我會詳細分析一下這個腳本」,用于將 Libero 數(shù)據(jù)轉換為 LeRobot 數(shù)據(jù)集 v2.0 格式,且可以輕松修改它以轉換您自己的數(shù)據(jù)
比如從此處下載原始 Libero 數(shù)據(jù)集,然后使用以下命令運行腳本
且作為示例,已將 BiPlay 代碼庫中的 aloha_pen_uncap_diverse_raw 數(shù)據(jù)集轉換,并將其上傳至 HuggingFace Hub,地址為 physical-intelligence/aloha_pen_uncap_diverseuv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/libero/data
- 定義使用自定義數(shù)據(jù)集的訓練配置,并運行訓練
提供pi0_aloha_pen_uncap 配置作為示例,您應該參考根README以了解如何使用新配置運行訓練
比如下面是 Libero 示例配置,可以根據(jù)自己的數(shù)據(jù)集進行修改:
? LiberoInputs和LiberoOutputs:定義從 Libero 環(huán)境到模型的數(shù)據(jù)映射,反之亦然——將用于訓練和推理
? LeRobotLiberoDataConfig:定義了如何處理來自 LeRobot 數(shù)據(jù)集的原始 Libero 數(shù)據(jù)以用于訓練
? TrainConfig:定義微調超參數(shù)、數(shù)據(jù)配置和權重加載器
- 啟動策略服務器并運行推理
訓練完成后,可以通過啟動策略服務器,然后從 Libero 評估腳本中查詢它來運行推理。啟動模型服務器很容易(他們在此示例中使用迭代 20,000 的檢查點,根據(jù)需要進行修改)uv run scripts/serve_policy.py policy:checkpoint --policy.config=pi0_fast_libero --policy.dir=checkpoints/pi0_fast_libero/my_experiment/20000
Libero數(shù)據(jù)集轉換腳本convert_libero_data_to_lerobot.py的解析
?接下來,我們使用Libero數(shù)據(jù)集(存儲在RLDS格式中)作為示例——將RLDS格式轉換為LeRobot格式,如何修改以適應其他自定義格式的數(shù)據(jù)
首先,咱們明確下Libero數(shù)據(jù)集的層級結構
Libero數(shù)據(jù)集
├── libero_10_no_noops/
├── libero_goal_no_noops/
├── libero_object_no_noops/
└── libero_spatial_no_noops/
? ? └── train/
? ? ? ? ????????└── episode
? ? ? ? ? ? ????????????????└── steps
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ├── observation
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????│ ? ???├── image (256x256x3)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? │? ? ? ├── wrist_image (256x256x3)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? │? ? ??└── state (8維向量)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ├── action (7維向量)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? └── language_instruction (文本)接下來,按如下步驟逐一執(zhí)行
- 關鍵常量定義
# 輸出數(shù)據(jù)集名稱,也用于Hugging Face Hub REPO_NAME = "your_hf_username/libero" RAW_DATASET_NAMES = ["libero_10_no_noops","libero_goal_no_noops","libero_object_no_noops","libero_spatial_no_noops", ] # 將多個Libero數(shù)據(jù)集合并為一個訓練數(shù)據(jù)集
- 定義主函數(shù)結構
主函數(shù)接受兩個參數(shù):def main(data_dir: str, *, push_to_hub: bool = False):
data_dir: 原始數(shù)據(jù)目錄路徑
push_to_hub: 是否推送到HuggingFace Hub的標志- 清理現(xiàn)有數(shù)據(jù)
確保輸出目錄干凈,刪除任何已存在的數(shù)據(jù)output_path = LEROBOT_HOME / REPO_NAMEif output_path.exists():shutil.rmtree(output_path)
- 創(chuàng)建LeRobot數(shù)據(jù)集:包含處理圖像、狀態(tài)和動作數(shù)據(jù)
定義數(shù)據(jù)集結構,包括:# 創(chuàng)建LeRobot數(shù)據(jù)集,定義要存儲的特征# OpenPi假設本體感知數(shù)據(jù)存儲在`state`中,動作存儲在`action`中# LeRobot假設圖像數(shù)據(jù)的dtype為`image`dataset = LeRobotDataset.create(repo_id=REPO_NAME, # 數(shù)據(jù)集的倉庫IDrobot_type="panda", # 機器人類型fps=10, # 幀率features={ # 特征定義"image": { # image數(shù)據(jù)"dtype": "image", # 數(shù)據(jù)類型"shape": (256, 256, 3), # 數(shù)據(jù)形狀"names": ["height", "width", "channel"], # 維度名稱},"wrist_image": { # 手腕image數(shù)據(jù)"dtype": "image", "shape": (256, 256, 3), "names": ["height", "width", "channel"], },"state": { # 狀態(tài)數(shù)據(jù)"dtype": "float32", "shape": (8,), "names": ["state"], },"actions": { # 動作數(shù)據(jù)"dtype": "float32", "shape": (7,), "names": ["actions"], },},image_writer_threads=10, # 圖像寫入線程數(shù)image_writer_processes=5, # 圖像寫入進程數(shù))
- 機器人類型:panda
- 幀率:10fps
- 特征定義:
? - 圖像:256x256x3的RGB圖像
? - 手腕圖像:同樣的格式
? - 狀態(tài):8維浮點數(shù)向量
? - 動作:7維浮點數(shù)向量
- 多線程/進程配置用于圖像處理- 數(shù)據(jù)轉換循環(huán)
這部分實現(xiàn)了數(shù)據(jù)轉換的核心邏輯:# 遍歷原始Libero數(shù)據(jù)集并將episode寫入LeRobot數(shù)據(jù)集# 你可以根據(jù)自己的數(shù)據(jù)格式修改此部分for raw_dataset_name in RAW_DATASET_NAMES:raw_dataset = tfds.load(raw_dataset_name, data_dir=data_dir, split="train") # 加載原始數(shù)據(jù)集for episode in raw_dataset: # 遍歷每個episodefor step in episode["steps"].as_numpy_iterator(): # 遍歷每個步驟dataset.add_frame({"image": step["observation"]["image"], # 添加圖像數(shù)據(jù)"wrist_image": step["observation"]["wrist_image"], # 添加手腕圖像數(shù)據(jù)"state": step["observation"]["state"], # 添加狀態(tài)數(shù)據(jù)"actions": step["action"], # 添加動作數(shù)據(jù)})dataset.save_episode(task=step["language_instruction"].decode()) # 保存episode并解碼語言指令
1. 遍歷所有原始數(shù)據(jù)集
2. 對每個數(shù)據(jù)集中的每個episode
3. 處理episode中的每一步
4. 保存frame數(shù)據(jù)和語言指令
相當于- 數(shù)據(jù)集的整合與發(fā)布
最后的處理步驟:
1. 整合數(shù)據(jù)集(不計算統(tǒng)計信息)
2. 可選:推送到HuggingFace Hub,包括:
? ?- 添加標簽
? ?- 設置為公開
? ?- 包含視頻
? ?- 指定許可證腳本可以通過以下命令運行:
uv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data
如果要推送到HuggingFace Hub:
uv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data --push_to_hub
總之,這個腳本展示了如何構建標準化的機器人學習數(shù)據(jù)集,為訓練像Pi0這樣的模型提供數(shù)據(jù)支持
1.2.2?在 UR5 數(shù)據(jù)集上微調 pi0
// 待更
1.3 安裝與運行
1.3.1 如何安裝本openpi開源庫
要運行此存儲庫中的模型,需要至少具有以下規(guī)格的 NVIDIA GPU。這些估算假設單個 GPU,但您也可以通過fsdp_devices
在訓練配置中進行配置來使用具有模型并行性的多個 GPU,以減少每個 GPU 的內存要求。另請注意,當前的訓練腳本尚不支持多節(jié)點訓練
模式 | 所需內存 | 示例 GPU |
---|---|---|
推理 | > 8 GB | RTX 4090 |
微調(LoRA) | > 22.5 GB | RTX 4090 |
微調(完整版) | > 70 GB | A100(80GB)/H100 |
PS,他們說該 repo 已在 Ubuntu 22.04 上測試過,其他操作系統(tǒng)可能不支持
以下是安裝過程
- 克隆此 repo 時,請確保更新子模塊:
git clone --recurse-submodules git@github.com:Physical-Intelligence/openpi.git# Or if you already cloned the repo: git submodule update --init --recursive
- 使用uv來管理 Python 依賴項??蓞㈤唘v 安裝說明進行設置
安裝 uv 后,運行以下命令設置環(huán)境:
注意:GIT_LFS_SKIP_SMUDGE=1需要將 LeRobot 作為依賴項GIT_LFS_SKIP_SMUDGE=1 uv sync
Docker:作為 uv 安裝的替代方案,他們還提供了使用 Docker 安裝 openpi 的說明
如果在系統(tǒng)設置中遇到問題,還可以考慮使用 Docker 來簡化安裝,詳情請參閱Docker 設置
2.3.2 如何把該庫的ALOHA sim環(huán)境跑起來
此外,該開源庫還提供ALOHA SIM
- 如使用docker
export SERVER_ARGS="--env ALOHA_SIM" docker compose -f examples/aloha_sim/compose.yml up --build
- 如沒有docker
? 終端窗口1
注意:如果您看到 EGL 錯誤,則可能需要安裝以下依賴項# Create virtual environment uv venv --python 3.10 examples/aloha_sim/.venv source examples/aloha_sim/.venv/bin/activate uv pip sync examples/aloha_sim/requirements.txt uv pip install -e packages/openpi-client# Run the simulation MUJOCO_GL=egl python examples/aloha_sim/main.py
sudo apt-get install -y libegl1-mesa-dev libgles2-mesa-dev
? 終端窗口2
# Run the server uv run scripts/serve_policy.py --env ALOHA_SIM
第二部分?如何基于你自己的私有數(shù)據(jù)集微調π0:含我司的微調實踐
// 待更