[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-93067":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":13,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":16,"rankGlobal":10,"rankLanguage":10,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":18,"hasPages":18,"topics":20,"createdAt":10,"pushedAt":10,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":15,"starSnapshotCount":15,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},93067,"opendm","dexmal\u002Fopendm","dexmal","An Open-World Foundation Model for General-Purpose Embodied Intelligence.","",null,"Python",53,1,52,0,41,"Apache License 2.0",false,"main",[21,22,23,24,25],"embodied-ai","embodied-intelligence","robotics","vision-language-action","vla","2026-07-22 04:02:08","# OpenDM\n\n![DM0.5](docs\u002Fimage\u002Fheader.png)\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.dexmal.com\u002Fblog\u002Fdm0.5\u002Findex_en.html\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F📖-Tech_Blog-blue\" alt=\"Tech Blog\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fhuggingface.co\u002Fcollections\u002FDexmal\u002Fdm05\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F%F0%9F%A4%97-Hugging%20Face-yellow\" alt=\"Hugging Face\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fmaas.dexmal.com\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMaaS-Online-brightgreen.svg\" alt=\"MaaS\">\u003C\u002Fa>\n  \u003Ca href=\"#license\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache--2.0-blue.svg\" alt=\"License\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  English | \u003Ca href=\"README.zh-CN.md\">简体中文\u003C\u002Fa>\n\u003C\u002Fp>\n\n## Introduction\n\nDM0.5 is Dexmal's next-generation Vision-Language-Action model (VLA) for open-world robot control. It builds on the native embodied modeling approach introduced by DM0, with systematic upgrades for open-ended instructions, long-horizon tasks, dynamic disturbances, and multi-embodiment robot control.\n\nOpenDM provides DM0.5 model weights, training and inference scripts, dataset registration examples, and evaluation workflows for researchers and developers to train, fine-tune, evaluate, and deploy the model.\n\n## News\n\n- [2026-07-09] DM0.5 is officially released. Read the [technical blog](https:\u002F\u002Fwww.dexmal.com\u002Fblog\u002Fdm0.5\u002Findex_en.html) for more details.\n\n## Models\n\n| Model | Description | Checkpoint |\n| --- | --- | --- |\n| DM05 | Base DM0.5 model for fine-tuning | [🤗 Dexmal\u002FDM05](https:\u002F\u002Fhuggingface.co\u002FDexmal\u002FDM05) |\n| DM05-libero | LIBERO fine-tuned DM0.5 model for evaluation | [🤗 Dexmal\u002FDM05-libero](https:\u002F\u002Fhuggingface.co\u002FDexmal\u002FDM05-libero) |\n\nExample checkpoint download:\n\n```bash\nhuggingface-cli download Dexmal\u002FDM05 --local-dir .\u002Fcheckpoints\u002FDM05\n```\n\n## Quick Start\n\nWe recommend using Docker to set up the runtime environment first, which helps avoid version mismatches across CUDA, PyTorch, flash-attn, and other dependencies on the host machine.\n\n### Requirements\n\n```text\nSystem requirements:\nUbuntu 20.04 \u002F 22.04\nNVIDIA GPU\nNVIDIA Driver\nDocker\nNVIDIA Container Toolkit\nConda (optional, only required for local pip installation)\n\nRecommended GPUs:\nRTX 4090, A100, H100, H20\n8 GPUs are recommended for training, and 1 GPU is sufficient for deployment inference.\n```\n\n### Docker Installation\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fdexmal\u002Fopendm.git\ncd opendm\n\ndocker run -it --rm --gpus all --network host \\\n  --name opendm \\\n  --shm-size=16g \\\n  -v \"$PWD\":\u002Fapp\u002Fopendm \\\n  -w \u002Fapp\u002Fopendm \\\n  dexmal\u002Fopendm:latest \u002Fbin\u002Fbash\n\n# Run from the OpenDM repository root inside the container.\nconda activate opendm\npip install -e .\n```\n\n### Local Installation\n\n```bash\nconda create -n opendm python=3.10 -y\nconda activate opendm\n\npip install torch torchvision \\\n  --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n\npip install ninja packaging\nMAX_JOBS=2 pip install flash-attn --no-build-isolation\n\n# Enter the OpenDM repository root.\ncd opendm\npip install -e .\n```\n\n## Inference\n\nAfter installing the environment and initializing the source code, you can start the model inference service. The service loads the specified checkpoint and exposes an HTTP endpoint for benchmark clients or other applications to request action predictions. Use a checkpoint that contains `norm_stats.json`, or make sure the matching stats already exist under `.\u002Fnorm_stats\u002F`.\n\n```bash\nscript\u002Fdm05_launcher.sh \\\n  --task inference \\\n  --nproc_per_node 1 \\\n  --model-config.model-name-or-path .\u002Fcheckpoints\u002FDM05 \\\n  --model-config.chunk-size 50 \\\n  --inference-config.port 7891\n```\n\nArguments:\n\n- `--task`: task type. Use `inference` for inference.\n- `--nproc_per_node`: number of GPUs on a single node. 1 GPU is sufficient for inference.\n- `--model-config.model-name-or-path`: model checkpoint path.\n- `--model-config.chunk-size`: action chunk length.\n- `--inference-config.port`: inference service port.\n\nDuring inference, the service first looks for `norm_stats.json` in the checkpoint directory. If it is not found, it falls back to the matching file under `.\u002Fnorm_stats\u002F`, which is normally generated during training for the same dataset, action mode, and chunk size.\n\nAfter the service starts, send a test request to verify that the endpoint returns a valid response:\n\n```bash\nbash tests\u002Fcurl_demo.sh http:\u002F\u002FSERVER_IP:7891\u002Fprocess_frame\n```\n\n`\u002Fprocess_frame` accepts a `multipart\u002Fform-data` request:\n\n- `text`: task instruction.\n- `states`: JSON array of the current robot state. The dimension and order must match the model's training and normalization statistics.\n- `image`: image files, one field per configured image key. The order must match `--inference-config.image-keys`.\n- `robot_type`: optional built-in robot type. Currently only `DOS W1` is supported. It provides the robot state description when relative actions need to be converted back to absolute actions.\n- `control_mode` and `speed`: text conditioning fields required when directly serving the pretrained `Dexmal\u002FDM05` model. They are normally not required for SFT checkpoints unless your SFT data was trained with the same fields.\n\nA successful response has the following shape.\n\n```text\n{\n  \"response\": [\n    [0.012, -0.034, 0.18, \"...\"],\n    [0.015, -0.031, 0.17, \"...\"],\n    ...\n  ]\n}\n```\n\n## Training\n\n### Data Preparation\n\nPrepare data files and dataset configuration according to the dexbotic [Data Guide](https:\u002F\u002Fgithub.com\u002Fdexmal\u002Fdexbotic\u002Fblob\u002Fmain\u002Fdocs\u002FData.md). Make sure `--data-config.dataset-name` in the training command matches the registered dataset name.\n\nThe training script selects a dataset through `--data-config.dataset-name`. Before training, register your dataset in the project dataset registry. We recommend using an existing file such as `opendm\u002Fdataset\u002Fdemo.py` as a reference, then creating a new dataset config file such as `opendm\u002Fdataset\u002Fmy_robot.py` and updating the dataset name, data paths, image keys, and state description.\n\n```python\n# opendm\u002Fdataset\u002Fmy_robot.py\n\nfrom opendm.constants.robot import RobotStateDesc\nfrom opendm.dataset.register import register_dataset\n\nMY_ROBOT_STATE_DESC = (\n    [RobotStateDesc.JOINT] * 6\n    + [RobotStateDesc.GRIPPER]\n    + [RobotStateDesc.JOINT] * 6\n    + [RobotStateDesc.GRIPPER]\n)\n\nregister_dataset(\n    {\n        \"my_robot\": {\n            \"jsonl_dir\": \".\u002Fassets\u002Fmy_robot\u002F\",\n            \"image_dir\": \".\u002Fassets\u002Fmy_robot\u002F\",\n            \"image_keys\": [\"images_1\", \"images_2\", \"images_3\"],\n            \"state_desc\": MY_ROBOT_STATE_DESC,\n        },\n    }\n)\n```\n\nField descriptions:\n\n- `my_robot`: dataset name registered in the dataset registry. Use it with `--data-config.dataset-name my_robot`.\n- `jsonl_dir`: directory containing training `jsonl` files.\n- `image_dir`: directory containing image files.\n- `image_keys`: image field names to load from the dataset.\n- `state_desc`: semantic description of each state\u002Faction dimension, such as robot joints and grippers.\n\nDuring training, if the corresponding normalization statistics file does not exist, the script automatically computes it from the current dataset, action mode, and chunk size, then saves it under `.\u002Fnorm_stats\u002F`.\n\n### Start Training\n\nAfter environment setup, source initialization, and data preparation, start model training. The training script reads the specified dataset configuration, loads the base checkpoint, and starts training according to the configuration.\n\n```bash\nscript\u002Fdm05_launcher.sh \\\n  --task train \\\n  --nproc_per_node 8 \\\n  --data-config.dataset-name my_robot \\\n  --model-config.model-name-or-path .\u002Fcheckpoints\u002FDM05 \\\n  --model-config.chunk-size 50\n```\n\nArguments:\n\n- `--task train`: run in training mode.\n- `--nproc_per_node 8`: number of training processes on a single node, usually matching the number of GPUs.\n- `--data-config.dataset-name my_robot`: dataset name for training. It must match the project dataset configuration.\n- `--model-config.model-name-or-path .\u002Fcheckpoints\u002FDM05`: initial model checkpoint path.\n- `--model-config.chunk-size 50`: action chunk length predicted by the model.\n\nTraining logs will include data loading, model initialization, loss values, and checkpoint saving. Before running a full training job, verify that the data path, model checkpoint path, and GPU count are correctly configured.\n\n## DM05 SFT with Demo and Custom Data\n\nStart by running a complete DM05 SFT workflow with the built-in demo data and `playground\u002Fdm05_sft_demo.py`. After you are familiar with the data format, normalization statistics, training, inference, and service validation flow, replace the demo dataset with your own robot data for SFT. See [DM05 SFT and Validation Guide](docs\u002Fen\u002Fdm05_finetuning.md).\n\n## LIBERO Fine-Tuning Reference\n\nUse the [DM05 LIBERO Training and Evaluation Guide](docs\u002Fen\u002Fdm05_libero.md) as an end-to-end reference for fine-tuning DM05. It covers data and model preparation, SFT training, inference service startup, and benchmark evaluation, and can help you adapt DM05 to your own robot datasets.\n\n## Guides\n\n- Download models: see [Models](#models) or visit [Dexmal Hugging Face](https:\u002F\u002Fhuggingface.co\u002FDexmal).\n- Prepare data: see the [Data Guide](https:\u002F\u002Fgithub.com\u002Fdexmal\u002Fdexbotic\u002Fblob\u002Fmain\u002Fdocs\u002FData.md).\n- Start inference service: see [Inference](#inference).\n- DM05 SFT with demo or custom data: see [DM05 SFT and Validation Guide](docs\u002Fen\u002Fdm05_finetuning.md).\n- LIBERO training and evaluation: see the [DM05 LIBERO Training and Evaluation Guide](docs\u002Fen\u002Fdm05_libero.md); for LoRA SFT, see [DM05 LIBERO LoRA Training](docs\u002Fen\u002Fdm05_libero_lora_training.md).\n\n## Community and Support\n\n- Learn more about Dexmal products and model updates on the [Dexmal website](https:\u002F\u002Fwww.dexmal.com\u002F).\n- Get DM model weights from [Dexmal Hugging Face](https:\u002F\u002Fhuggingface.co\u002FDexmal).\n- If you encounter issues, please report them through [GitHub Issues](https:\u002F\u002Fgithub.com\u002Fdexmal\u002Fopendm\u002Fissues).\n- For further discussion, scan the [WeChat QR code](docs\u002Fimage\u002Fwechat.jpeg) to contact us.\n\nWe will continue to release more model weights, technical documentation, and examples. If this project is helpful to you, please consider giving us a star on GitHub [![GitHub](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fdexmal\u002Fopendm?color=5B5BD6)](https:\u002F\u002Fgithub.com\u002Fdexmal\u002Fopendm). Your support helps us move forward.\n\n## License\n\nThis project is licensed under the [Apache-2.0](LICENSE).\n","OpenDM 是一个面向通用具身智能的开放世界基础模型，专注于机器人在真实物理环境中的感知-决策-执行闭环。它基于 Vision-Language-Action（VLA）架构，支持开放式指令理解、长时序任务规划、动态环境扰动鲁棒响应及多形态机器人本体适配。项目提供预训练权重、标准化训练\u002F推理脚本、数据集接入示例和评估流程，兼顾研究可复现性与工程部署可行性。适用于服务机器人、工业协作机器人、仿真环境智能体等需跨模态理解与动作生成的具身AI研发场景。",2,"2026-07-11 02:30:49","CREATED_QUERY"]