errm / docs /UPLOAD_GUIDE.md
yuffish's picture
Add files using upload-large-folder tool
a741a7c verified
# HuggingFace 数据集上传完整指南
## 概述
本指南将帮助你完成以下流程:
1. 从 DROID 数据集中采样视频
2. 准备 HuggingFace 数据集格式
3. 上传到 HuggingFace Hub
---
## 第一步:准备数据集
### 1.1 配置参数
编辑 `prepare_hf_dataset.py`,修改以下参数:
```python
# 采样配置
TOTAL_SAMPLES = 2500 # 总共采样的视频数量(建议 2000-3000)
PROCESS_TYPE = "failure" # 处理类型
SAMPLING_STRATEGY = "balanced" # 采样策略
# 采样策略说明:
# - "balanced": 按任务类别均衡采样(推荐)
# - "random": 完全随机采样
# - "proportional": 按原始比例采样
```
### 1.2 运行采样脚本
```bash
cd /home/jqliu/projects/RewardModel/data_sta
# 运行脚本
python prepare_hf_dataset.py
```
**输出示例**
```
==========================================
准备 HuggingFace 数据集
==========================================
步骤 1: 扫描视频文件...
扫描数据源: 100%|██████████| 13/13
找到 15157 个视频
步骤 2: 采样视频 (策略: balanced, 目标数量: 2500)...
任务类别分布:
Move object into or out of container: 2699
Move object to a new position: 2494
...
采样完成: 2500 个视频
采样后任务分布 (前10):
Move object into or out of container: 125
Move object to a new position: 122
...
步骤 3: 复制文件到 /playpen-ssd/dataset/droid_raw/hg_data...
复制文件: 100%|██████████| 2500/2500
步骤 4: 创建 README.md...
==========================================
数据集准备完成!
==========================================
位置: /playpen-ssd/dataset/droid_raw/hg_data
总样本数: 2500
总大小: 12.34 GB
```
### 1.3 验证数据集
```bash
# 检查文件结构
tree -L 2 /playpen-ssd/dataset/droid_raw/hg_data
# 应该看到:
# hg_data/
# ├── videos/ (2500 个 .mp4 文件)
# ├── metadata/ (2500 个 .json 文件)
# ├── dataset_info.json
# └── README.md
# 检查数据集信息
cat /playpen-ssd/dataset/droid_raw/hg_data/dataset_info.json | jq '.total_samples'
```
---
## 第二步:配置 HuggingFace
### 2.1 创建 HuggingFace 账户
1. 访问 https://huggingface.co/join
2. 注册账户(如果已有账户,跳过此步)
3. 记住你的用户名(例如:`jqliu`)
### 2.2 获取 Access Token
1. 登录 HuggingFace
2. 访问 https://huggingface.co/settings/tokens
3. 点击 **"New token"**
4. 填写:
- Name: `dataset-upload`
- Role: **Write** (重要!必须有写权限)
5. 点击 **"Generate"**
6. **复制并保存** token(只显示一次)
### 2.3 设置 Token
**方法 1: 环境变量(推荐)**
```bash
# 临时设置(当前终端有效)
export HF_TOKEN="hf_xxxxxxxxxxxxxxxxxxxxx"
# 永久设置(添加到 ~/.bashrc)
echo 'export HF_TOKEN="hf_xxxxxxxxxxxxxxxxxxxxx"' >> ~/.bashrc
source ~/.bashrc
```
**方法 2: 使用 huggingface-cli**
```bash
# 安装 huggingface_hub
pip install huggingface_hub
# 登录
huggingface-cli login
# 输入你的 token
```
### 2.4 验证 Token
```bash
python -c "from huggingface_hub import HfApi; api = HfApi(); print(api.whoami())"
```
应该显示你的用户信息。
---
## 第三步:上传数据集
### 3.1 配置上传脚本
编辑 `upload_to_huggingface.py`:
```python
# HuggingFace 配置
HF_USERNAME = "jqliu" # 替换为你的用户名
DATASET_NAME = "droid-failure-sampled" # 数据集名称
PRIVATE = False # True=私有数据集, False=公开数据集
```
### 3.2 选择上传方法
根据数据集大小选择:
| 数据集大小 | 推荐方法 | 说明 |
|-----------|---------|------|
| < 5 GB | 方法 1 或 2 | 简单快速 |
| 5-20 GB | 方法 2 | 支持预览和流式加载 |
| > 20 GB | 方法 3 | 分块上传,更稳定 |
### 3.3 运行上传脚本
```bash
cd /home/jqliu/projects/RewardModel/data_sta
# 安装依赖
pip install huggingface_hub datasets
# 运行上传脚本
python upload_to_huggingface.py
```
**交互式选择**
```
请选择上传方法:
1. upload_folder (简单快速,适合小数据集)
2. Datasets 库 (推荐,支持预览和流式加载)
3. 分块上传 (适合大数据集 > 5GB)
请输入选择 (1/2/3): 2
```
**上传过程**:
```
==========================================
方法 2: 使用 Datasets 库上传
==========================================
创建 Dataset 对象...
读取数据集: 100%|██████████| 2500/2500
Dataset 大小: 2500 个样本
上传到 HuggingFace Hub: jqliu/droid-failure-sampled
Uploading: 100%|██████████| 12.3G/12.3G [15:23<00:00]
[SUCCESS] 上传完成!
数据集链接: https://huggingface.co/datasets/jqliu/droid-failure-sampled
```
### 3.4 使用命令行直接上传(备选方案)
如果脚本失败,可以使用命令行:
```bash
# 方法 A: 使用 huggingface-cli
huggingface-cli upload jqliu/droid-failure-sampled \
/playpen-ssd/dataset/droid_raw/hg_data \
--repo-type=dataset
# 方法 B: 使用 Git LFS(适合大文件)
cd /playpen-ssd/dataset/droid_raw/hg_data
git init
git lfs install
git lfs track "*.mp4"
git add .
git commit -m "Initial commit"
git remote add origin https://huggingface.co/datasets/jqliu/droid-failure-sampled
git push -u origin main
```
---
## 第四步:验证和使用
### 4.1 访问数据集页面
在浏览器中访问:
```
https://huggingface.co/datasets/你的用户名/droid-failure-sampled
```
你应该看到:
- ✅ README.md 自动渲染
- ✅ 文件浏览器
- ✅ 数据集统计信息
### 4.2 测试加载数据集
```python
from datasets import load_dataset
# 加载数据集
dataset = load_dataset("jqliu/droid-failure-sampled")
# 查看第一个样本
example = dataset['train'][0]
print(f"Video ID: {example['video_id']}")
print(f"Task: {example['task_description']}")
print(f"Source: {example['source']}")
```
### 4.3 更新 README(可选)
如果需要更新 README:
```bash
cd /playpen-ssd/dataset/droid_raw/hg_data
# 编辑 README.md
vim README.md
# 使用脚本重新上传
python upload_to_huggingface.py
# 或使用 CLI
huggingface-cli upload jqliu/droid-failure-sampled README.md
```
---
## 常见问题
### Q1: 上传速度很慢怎么办?
**解决方案**
1. **使用分块上传**(方法 3)
2. **减少样本数量**:修改 `TOTAL_SAMPLES = 1000`
3. **使用网络代理**
```bash
export HTTP_PROXY=http://your-proxy:port
export HTTPS_PROXY=http://your-proxy:port
```
### Q2: 上传中断了怎么办?
**解决方案**
HuggingFace 支持断点续传,重新运行上传脚本即可:
```bash
python upload_to_huggingface.py
```
### Q3: 如何删除已上传的数据集?
```bash
# 使用 API 删除
from huggingface_hub import delete_repo
delete_repo(repo_id="jqliu/droid-failure-sampled", repo_type="dataset")
# 或在网页上删除
# https://huggingface.co/datasets/jqliu/droid-failure-sampled/settings
```
### Q4: 如何设置数据集为私有?
在 `upload_to_huggingface.py` 中:
```python
PRIVATE = True
```
或在网页上:
```
Settings → Make private
```
### Q5: 上传失败显示 "Repository not found"
**原因**:仓库未创建或用户名错误
**解决方案**
1. 检查 `HF_USERNAME` 是否正确
2. 手动创建仓库:访问 https://huggingface.co/new-dataset
### Q6: 如何查看上传进度?
使用 `tqdm` 会自动显示进度条。如果看不到:
```python
# 在脚本中添加
import logging
logging.basicConfig(level=logging.INFO)
```
---
## 高级功能
### 1. 创建数据集卡片(Dataset Card)
编辑 `README.md`,添加 YAML 元数据:
```yaml
---
dataset_info:
features:
- name: video_id
dtype: string
- name: task_description
dtype: string
- name: source
dtype: string
- name: success
dtype: bool
splits:
- name: train
num_examples: 2500
dataset_size: 12.34GB
task_categories:
- video-classification
- robotics
tags:
- robotics
- manipulation
- failure-detection
license: mit
---
# DROID Failure Dataset
...
```
### 2. 分割数据集(train/val/test)
```python
from datasets import Dataset, DatasetDict
# 分割
dataset_dict = DatasetDict({
'train': dataset.select(range(2000)),
'validation': dataset.select(range(2000, 2250)),
'test': dataset.select(range(2250, 2500))
})
# 上传
dataset_dict.push_to_hub("jqliu/droid-failure-sampled")
```
### 3. 添加视频预处理
```python
from datasets import Dataset, Features, Value, Video
# 定义特征(包含视频)
features = Features({
'video_id': Value('string'),
'video': Video(), # 视频特征
'task_description': Value('string'),
...
})
# 创建数据集
dataset = Dataset.from_dict(data, features=features)
```
---
## 完整工作流示例
```bash
# 1. 准备数据集
cd /home/jqliu/projects/RewardModel/data_sta
python prepare_hf_dataset.py
# 2. 设置 HuggingFace Token
export HF_TOKEN="hf_xxxxxxxxxxxxxxxxxxxxx"
# 3. 上传数据集
python upload_to_huggingface.py
# 选择方法 2
# 4. 验证
python -c "from datasets import load_dataset; ds = load_dataset('jqliu/droid-failure-sampled'); print(len(ds['train']))"
```
---
## 参考资源
- **HuggingFace Hub 文档**: https://huggingface.co/docs/hub
- **Datasets 库文档**: https://huggingface.co/docs/datasets
- **Git LFS 文档**: https://git-lfs.github.com/
- **DROID 数据集**: https://droid-dataset.github.io/
---
## 联系支持
如果遇到问题:
1. 查看 HuggingFace 社区论坛: https://discuss.huggingface.co/
2. 提交 Issue: https://github.com/huggingface/datasets/issues
3. 联系数据集维护者
---
## 附录:脚本快速参考
### prepare_hf_dataset.py
采样并准备数据集
**关键参数**
- `TOTAL_SAMPLES`: 采样数量
- `SAMPLING_STRATEGY`: 采样策略
- `PROCESS_TYPE`: 数据类型
### upload_to_huggingface.py
上传数据集到 HuggingFace
**关键参数**
- `HF_USERNAME`: 用户名
- `DATASET_NAME`: 数据集名称
- `PRIVATE`: 是否私有
**上传方法**
1. upload_folder(简单)
2. Datasets 库(推荐)
3. 分块上传(大文件)