Add proof-pile logic inputs to pretrain builder
This commit is contained in:
10
README.md
10
README.md
@@ -44,16 +44,10 @@ repo 路径:
|
|||||||
/mnt/beegfs/yi/laoyao_2b_moe
|
/mnt/beegfs/yi/laoyao_2b_moe
|
||||||
```
|
```
|
||||||
|
|
||||||
200B 数据当前构建源路径:
|
预训练数据实际读取路径:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
/mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset/train/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701
|
/mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset/train/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701
|
||||||
```
|
```
|
||||||
|
|
||||||
构建完成后同步到 repo 内:
|
数据不再复制到 repo 内;训练直接读取上面的源输出目录。`dataset/pretrain/data/` 仍被 `.gitignore` 忽略,仅用于小规模临时样本。
|
||||||
|
|
||||||
```bash
|
|
||||||
bash scripts/sync_pretrain_data_into_repo.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
同步后的数据目录 `dataset/pretrain/data/` 被 `.gitignore` 忽略,不提交到 GitHub。
|
|
||||||
|
|||||||
@@ -10,22 +10,33 @@
|
|||||||
| english_edu | 20% | FineWeb-Edu / Ultra-FineWeb 高质量教育文本 |
|
| english_edu | 20% | FineWeb-Edu / Ultra-FineWeb 高质量教育文本 |
|
||||||
| chinese_clean | 10% | Ultra-FineWeb zh,后续可接 CCI3-HQ/SkyPile |
|
| chinese_clean | 10% | Ultra-FineWeb zh,后续可接 CCI3-HQ/SkyPile |
|
||||||
| science | 10% | medmcqa、proofwriter、scienceqa、sciq、qasc、openbookqa;不足由 english_edu 补齐 |
|
| science | 10% | medmcqa、proofwriter、scienceqa、sciq、qasc、openbookqa;不足由 english_edu 补齐 |
|
||||||
| logic | 10% | Jiayi scored education/text 数据中的逻辑类样本 |
|
| logic | 10% | Jiayi scored education/text 数据中的逻辑类样本 + Proof-Pile-2/OpenWebMath/arXiv/AlgebraicStack 的高推理密度文本 |
|
||||||
| math | 5% | Jiayi scored math/knowledge 数据 |
|
| math | 5% | Jiayi scored math/knowledge 数据 |
|
||||||
| code | 5% | Jiayi cleaned multilingual code 数据 |
|
| code | 5% | Jiayi cleaned multilingual code 数据 |
|
||||||
|
|
||||||
## 数据本体
|
## 数据本体
|
||||||
|
|
||||||
真实数据应放在:
|
真实数据实际保留在:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dataset/pretrain/data/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701
|
/mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset/train/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701
|
||||||
```
|
```
|
||||||
|
|
||||||
该目录被 `.gitignore` 忽略。当前 g0033 构建完成后执行:
|
不要再把 405G 数据复制到 repo 内。BeegFS hardlink 不被允许,rsync 会造成空间翻倍并可能失败。训练脚本应直接读取该源目录。
|
||||||
|
|
||||||
|
## Logic 补充源
|
||||||
|
|
||||||
|
`wait_and_build_rebalanced_pretrain_200b.sh` 默认将以下本地 Proof-Pile-2 子集作为显式 `--logic-input`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash scripts/sync_pretrain_data_into_repo.sh
|
/mnt/beegfs/cjy/cjy-training/laoyao_model/data/raw/hf_datasets/EleutherAI__proof-pile-2/open-web-math/train/*.jsonl.zst
|
||||||
|
/mnt/beegfs/cjy/cjy-training/laoyao_model/data/raw/hf_datasets/EleutherAI__proof-pile-2/arxiv/train/*.jsonl.zst
|
||||||
|
/mnt/beegfs/cjy/cjy-training/laoyao_model/data/raw/hf_datasets/EleutherAI__proof-pile-2/algebraic-stack/train/*.jsonl.zst
|
||||||
```
|
```
|
||||||
|
|
||||||
同步脚本优先使用 hardlink,避免在同一个 BeegFS 上重复占用大规模空间。
|
这些 `.jsonl.zst` 文件由 `build_rebalanced_pretrain_dataset.py` 通过系统 `zstd -dc` 流式读取,不需要先解压到 BeegFS。后续如果下载了 StackExchange 或 PhilPapers,可用冒号分隔的 `LOGIC_INPUT_EXTRA` 追加:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
LOGIC_INPUT_EXTRA='/path/to/stackexchange/**/*.jsonl.zst:/path/to/philpapers/**/*.jsonl.zst' \
|
||||||
|
bash dataset/pretrain/scripts/wait_and_build_rebalanced_pretrain_200b.sh
|
||||||
|
```
|
||||||
|
|||||||
@@ -98,6 +98,6 @@
|
|||||||
"This recipe intentionally reduces code to 5% for stage-1 pretraining.",
|
"This recipe intentionally reduces code to 5% for stage-1 pretraining.",
|
||||||
"The previous code40/text60 mixture is useful as cleaned input inventory, not as the target mixture.",
|
"The previous code40/text60 mixture is useful as cleaned input inventory, not as the target mixture.",
|
||||||
"Science shortfall is explicitly reassigned to english_edu and recorded in report.json. Other missing quotas should remain visible.",
|
"Science shortfall is explicitly reassigned to english_edu and recorded in report.json. Other missing quotas should remain visible.",
|
||||||
"Run scripts/data/start_rebalanced_pretrain_dataset.sh to materialize parquet shards and report.json."
|
"Run dataset/pretrain/scripts/start_rebalanced_pretrain_dataset.sh to materialize parquet shards and report.json."
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"name": "pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701",
|
||||||
|
"status": "materialized_shortfall",
|
||||||
|
"target_tokens": 200000000000,
|
||||||
|
"actual_tokens": 182667460903,
|
||||||
|
"actual_docs": 158109491,
|
||||||
|
"shards": 1582,
|
||||||
|
"source_output_path": "/mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset/train/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701",
|
||||||
|
"repo_data_path_policy": "do_not_copy_large_dataset_into_git_repo; train directly from source_output_path",
|
||||||
|
"source_output_size_observed": "405G",
|
||||||
|
"category_tokens": {
|
||||||
|
"english_web": 80000000277,
|
||||||
|
"english_edu": 59954167427,
|
||||||
|
"chinese_clean": 20000007279,
|
||||||
|
"math": 10000000436,
|
||||||
|
"code": 10000003541,
|
||||||
|
"logic": 2667446796,
|
||||||
|
"science": 45835147
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
"The 200B builder exhausted available sources at 182.667B tokens.",
|
||||||
|
"Hardlink sync into repo failed with Operation not permitted on BeegFS.",
|
||||||
|
"Rsync fallback failed with No space left on device after an incomplete 172G copy; that partial copy was removed.",
|
||||||
|
"Training configs should point directly to source_output_path."
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -11,6 +11,7 @@ import os
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
from typing import Iterable, Mapping, Sequence
|
from typing import Iterable, Mapping, Sequence
|
||||||
|
|
||||||
@@ -233,7 +234,12 @@ def parse_args() -> argparse.Namespace:
|
|||||||
default=[],
|
default=[],
|
||||||
help="Science QA source, e.g. medmcqa/proofwriter/scienceqa/sciq/qasc/openbookqa.",
|
help="Science QA source, e.g. medmcqa/proofwriter/scienceqa/sciq/qasc/openbookqa.",
|
||||||
)
|
)
|
||||||
parser.add_argument("--logic-input", action="append", default=[], help="Optional explicit logic source path/dir/glob.")
|
parser.add_argument(
|
||||||
|
"--logic-input",
|
||||||
|
action="append",
|
||||||
|
default=[],
|
||||||
|
help="Optional explicit logic source path/dir/glob. Supports parquet, jsonl, and jsonl.zst.",
|
||||||
|
)
|
||||||
parser.add_argument("--math-input", action="append", default=[], help="Optional explicit math source path/dir/glob.")
|
parser.add_argument("--math-input", action="append", default=[], help="Optional explicit math source path/dir/glob.")
|
||||||
parser.add_argument("--code-input", action="append", default=[], help="Code source path/dir/glob.")
|
parser.add_argument("--code-input", action="append", default=[], help="Code source path/dir/glob.")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
@@ -393,10 +399,10 @@ def build_source_specs(args: argparse.Namespace) -> tuple[SourceSpec, ...]:
|
|||||||
("science", args.science_input),
|
("science", args.science_input),
|
||||||
("english_edu", args.english_edu_input),
|
("english_edu", args.english_edu_input),
|
||||||
("chinese_clean", args.chinese_clean_input),
|
("chinese_clean", args.chinese_clean_input),
|
||||||
("auto_text", args.jiayi_scored_input or [DEFAULT_JIAYI_SCORED_INPUT]),
|
("auto_text", args.jiayi_scored_input),
|
||||||
("logic", args.logic_input),
|
("logic", args.logic_input),
|
||||||
("math", args.math_input),
|
("math", args.math_input),
|
||||||
("code", args.code_input or [DEFAULT_CODE_INPUT]),
|
("code", args.code_input),
|
||||||
)
|
)
|
||||||
specs: list[SourceSpec] = []
|
specs: list[SourceSpec] = []
|
||||||
for family, patterns in raw_specs:
|
for family, patterns in raw_specs:
|
||||||
@@ -415,8 +421,10 @@ def resolve_paths(patterns: Sequence[str]) -> tuple[Path, ...]:
|
|||||||
path = Path(pattern)
|
path = Path(pattern)
|
||||||
if path.is_dir():
|
if path.is_dir():
|
||||||
paths.extend(path.glob("*.jsonl"))
|
paths.extend(path.glob("*.jsonl"))
|
||||||
|
paths.extend(path.glob("*.jsonl.zst"))
|
||||||
paths.extend(path.glob("*.parquet"))
|
paths.extend(path.glob("*.parquet"))
|
||||||
paths.extend(path.glob("rank_*/*.jsonl"))
|
paths.extend(path.glob("rank_*/*.jsonl"))
|
||||||
|
paths.extend(path.glob("rank_*/*.jsonl.zst"))
|
||||||
paths.extend(path.glob("rank_*/*.parquet"))
|
paths.extend(path.glob("rank_*/*.parquet"))
|
||||||
continue
|
continue
|
||||||
matches = glob.glob(pattern, recursive=True)
|
matches = glob.glob(pattern, recursive=True)
|
||||||
@@ -427,10 +435,10 @@ def resolve_paths(patterns: Sequence[str]) -> tuple[Path, ...]:
|
|||||||
paths.append(path)
|
paths.append(path)
|
||||||
continue
|
continue
|
||||||
raise FileNotFoundError(pattern)
|
raise FileNotFoundError(pattern)
|
||||||
supported = [path.resolve() for path in paths if file_format(path) in {"jsonl", "parquet"}]
|
supported = [path.resolve() for path in paths if file_format(path) in {"jsonl", "jsonl_zst", "parquet"}]
|
||||||
unique = tuple(sorted(set(supported), key=str))
|
unique = tuple(sorted(set(supported), key=str))
|
||||||
if not unique:
|
if not unique:
|
||||||
raise FileNotFoundError(f"no JSONL/Parquet files matched: {patterns!r}")
|
raise FileNotFoundError(f"no JSONL/JSONL.ZST/Parquet files matched: {patterns!r}")
|
||||||
return unique
|
return unique
|
||||||
|
|
||||||
|
|
||||||
@@ -446,6 +454,27 @@ def iter_rows(path: Path) -> Iterable[Mapping[str, object]]:
|
|||||||
if isinstance(row, Mapping):
|
if isinstance(row, Mapping):
|
||||||
yield row
|
yield row
|
||||||
return
|
return
|
||||||
|
if fmt == "jsonl_zst":
|
||||||
|
with subprocess.Popen(
|
||||||
|
["zstd", "-dc", str(path)],
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
text=True,
|
||||||
|
encoding="utf-8",
|
||||||
|
errors="replace",
|
||||||
|
) as proc:
|
||||||
|
assert proc.stdout is not None
|
||||||
|
for line in proc.stdout:
|
||||||
|
try:
|
||||||
|
row = json.loads(line)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
continue
|
||||||
|
if isinstance(row, Mapping):
|
||||||
|
yield row
|
||||||
|
returncode = proc.wait()
|
||||||
|
if returncode:
|
||||||
|
raise RuntimeError(f"zstd failed with exit code {returncode}: {path}")
|
||||||
|
return
|
||||||
parquet_file = pq.ParquetFile(path)
|
parquet_file = pq.ParquetFile(path)
|
||||||
columns = [
|
columns = [
|
||||||
name
|
name
|
||||||
@@ -662,6 +691,8 @@ def prepare_output_dir(path: Path, *, overwrite: bool) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def file_format(path: Path) -> str:
|
def file_format(path: Path) -> str:
|
||||||
|
if path.name.lower().endswith(".jsonl.zst"):
|
||||||
|
return "jsonl_zst"
|
||||||
suffix = path.suffix.lower()
|
suffix = path.suffix.lower()
|
||||||
if suffix == ".jsonl":
|
if suffix == ".jsonl":
|
||||||
return "jsonl"
|
return "jsonl"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
|
||||||
cd "$ROOT_DIR"
|
cd "$ROOT_DIR"
|
||||||
|
|
||||||
export http_proxy="${http_proxy:-http://10.20.34.2:3128}"
|
export http_proxy="${http_proxy:-http://10.20.34.2:3128}"
|
||||||
@@ -18,7 +18,7 @@ echo "[rebalanced-data] root=$ROOT_DIR"
|
|||||||
echo "[rebalanced-data] default_target_tokens=$TARGET_TOKENS (CLI --target-tokens overrides this)"
|
echo "[rebalanced-data] default_target_tokens=$TARGET_TOKENS (CLI --target-tokens overrides this)"
|
||||||
echo "[rebalanced-data] note=$WORKERS_NOTE"
|
echo "[rebalanced-data] note=$WORKERS_NOTE"
|
||||||
|
|
||||||
python scripts/data/build_rebalanced_pretrain_dataset.py \
|
python dataset/pretrain/scripts/build_rebalanced_pretrain_dataset.py \
|
||||||
--target-tokens "$TARGET_TOKENS" \
|
--target-tokens "$TARGET_TOKENS" \
|
||||||
--output-dir "${OUTPUT_DIR:-data/train/pretrain_rebalanced_knowledge80_logic10_math5_code5_v1_20260630}" \
|
--output-dir "${OUTPUT_DIR:-data/train/pretrain_rebalanced_knowledge80_logic10_math5_code5_v1_20260630}" \
|
||||||
--seed "${SEED:-20260630}" \
|
--seed "${SEED:-20260630}" \
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
|
||||||
cd "$ROOT_DIR"
|
cd "$ROOT_DIR"
|
||||||
|
|
||||||
export http_proxy="${http_proxy:-http://10.20.34.2:3128}"
|
export http_proxy="${http_proxy:-http://10.20.34.2:3128}"
|
||||||
@@ -21,7 +21,7 @@ SEED="${SEED:-42}"
|
|||||||
OUTPUT_ROOT="${OUTPUT_ROOT:-/mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset}"
|
OUTPUT_ROOT="${OUTPUT_ROOT:-/mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset}"
|
||||||
MAX_MBPS="${MAX_MBPS:-0}"
|
MAX_MBPS="${MAX_MBPS:-0}"
|
||||||
|
|
||||||
python scripts/data/download_rebalanced_sources.py \
|
python dataset/pretrain/scripts/download_rebalanced_sources.py \
|
||||||
--seed "$SEED" \
|
--seed "$SEED" \
|
||||||
--output-root "$OUTPUT_ROOT" \
|
--output-root "$OUTPUT_ROOT" \
|
||||||
--max-mbps "$MAX_MBPS" \
|
--max-mbps "$MAX_MBPS" \
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
|
||||||
cd "$ROOT_DIR"
|
cd "$ROOT_DIR"
|
||||||
|
|
||||||
export http_proxy="${http_proxy:-http://10.20.34.2:3128}"
|
export http_proxy="${http_proxy:-http://10.20.34.2:3128}"
|
||||||
@@ -23,11 +23,27 @@ CHINESE_CLEAN_INPUT="${CHINESE_CLEAN_INPUT:-$DATA_ROOT/ms_ultra_fineweb_zh/**/*.
|
|||||||
SCIENCE_INPUT="${SCIENCE_INPUT:-$DATA_ROOT/science_*/*/*.parquet}"
|
SCIENCE_INPUT="${SCIENCE_INPUT:-$DATA_ROOT/science_*/*/*.parquet}"
|
||||||
JIAYI_SCORED_INPUT="${JIAYI_SCORED_INPUT:-/mnt/beegfs/cjy/cjy-training/laoyao_model/data/scored/edu_fineweb_math_knowledge_cross_near_h1_v1_20260620/rank_*/*.jsonl}"
|
JIAYI_SCORED_INPUT="${JIAYI_SCORED_INPUT:-/mnt/beegfs/cjy/cjy-training/laoyao_model/data/scored/edu_fineweb_math_knowledge_cross_near_h1_v1_20260620/rank_*/*.jsonl}"
|
||||||
CODE_INPUT="${CODE_INPUT:-/mnt/beegfs/cjy/cjy-training/laoyao_model/data/dedup/pretrain_python_clean_code_multilang_cross_near_h1_min256_v1_20260623/*.parquet}"
|
CODE_INPUT="${CODE_INPUT:-/mnt/beegfs/cjy/cjy-training/laoyao_model/data/dedup/pretrain_python_clean_code_multilang_cross_near_h1_min256_v1_20260623/*.parquet}"
|
||||||
|
PROOF_PILE_ROOT="${PROOF_PILE_ROOT:-/mnt/beegfs/cjy/cjy-training/laoyao_model/data/raw/hf_datasets/EleutherAI__proof-pile-2}"
|
||||||
|
|
||||||
|
LOGIC_INPUTS=()
|
||||||
|
LOGIC_INPUTS+=("${PROOF_PILE_ROOT}/open-web-math/train/*.jsonl.zst")
|
||||||
|
LOGIC_INPUTS+=("${PROOF_PILE_ROOT}/arxiv/train/*.jsonl.zst")
|
||||||
|
LOGIC_INPUTS+=("${PROOF_PILE_ROOT}/algebraic-stack/train/*.jsonl.zst")
|
||||||
|
if [[ -n "${LOGIC_INPUT_EXTRA:-}" ]]; then
|
||||||
|
IFS=':' read -r -a EXTRA_LOGIC_INPUTS <<< "$LOGIC_INPUT_EXTRA"
|
||||||
|
LOGIC_INPUTS+=("${EXTRA_LOGIC_INPUTS[@]}")
|
||||||
|
fi
|
||||||
|
LOGIC_ARGS=()
|
||||||
|
for logic_input in "${LOGIC_INPUTS[@]}"; do
|
||||||
|
LOGIC_ARGS+=(--logic-input "$logic_input")
|
||||||
|
done
|
||||||
|
|
||||||
echo "[wait-build] root=$ROOT_DIR"
|
echo "[wait-build] root=$ROOT_DIR"
|
||||||
echo "[wait-build] data_root=$DATA_ROOT"
|
echo "[wait-build] data_root=$DATA_ROOT"
|
||||||
echo "[wait-build] output_dir=$OUTPUT_DIR"
|
echo "[wait-build] output_dir=$OUTPUT_DIR"
|
||||||
echo "[wait-build] target_tokens=$TARGET_TOKENS"
|
echo "[wait-build] target_tokens=$TARGET_TOKENS"
|
||||||
|
echo "[wait-build] proof_pile_root=$PROOF_PILE_ROOT"
|
||||||
|
printf '[wait-build] logic_input=%s\n' "${LOGIC_INPUTS[@]}"
|
||||||
echo "[wait-build] waiting for zh shards: $EXPECTED_ZH_SHARDS"
|
echo "[wait-build] waiting for zh shards: $EXPECTED_ZH_SHARDS"
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
@@ -40,23 +56,30 @@ while true; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
echo "[wait-build] running full dry-run"
|
echo "[wait-build] running full dry-run"
|
||||||
bash scripts/data/start_rebalanced_pretrain_dataset.sh \
|
bash dataset/pretrain/scripts/start_rebalanced_pretrain_dataset.sh \
|
||||||
--dry-run \
|
--dry-run \
|
||||||
--english-web-input "$ENGLISH_WEB_INPUT" \
|
--english-web-input "$ENGLISH_WEB_INPUT" \
|
||||||
--english-edu-input "$ENGLISH_EDU_INPUT" \
|
--english-edu-input "$ENGLISH_EDU_INPUT" \
|
||||||
--chinese-clean-input "$CHINESE_CLEAN_INPUT" \
|
--chinese-clean-input "$CHINESE_CLEAN_INPUT" \
|
||||||
--science-input "$SCIENCE_INPUT" \
|
--science-input "$SCIENCE_INPUT" \
|
||||||
|
"${LOGIC_ARGS[@]}" \
|
||||||
--jiayi-scored-input "$JIAYI_SCORED_INPUT" \
|
--jiayi-scored-input "$JIAYI_SCORED_INPUT" \
|
||||||
--code-input "$CODE_INPUT"
|
--code-input "$CODE_INPUT"
|
||||||
|
|
||||||
|
if [[ "${DRY_RUN_ONLY:-0}" == "1" ]]; then
|
||||||
|
echo "[wait-build] dry-run only; skip materialization"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
echo "[wait-build] starting full materialization"
|
echo "[wait-build] starting full materialization"
|
||||||
OUTPUT_DIR="$OUTPUT_DIR" TARGET_TOKENS="$TARGET_TOKENS" \
|
OUTPUT_DIR="$OUTPUT_DIR" TARGET_TOKENS="$TARGET_TOKENS" \
|
||||||
bash scripts/data/start_rebalanced_pretrain_dataset.sh \
|
bash dataset/pretrain/scripts/start_rebalanced_pretrain_dataset.sh \
|
||||||
--overwrite \
|
--overwrite \
|
||||||
--english-web-input "$ENGLISH_WEB_INPUT" \
|
--english-web-input "$ENGLISH_WEB_INPUT" \
|
||||||
--english-edu-input "$ENGLISH_EDU_INPUT" \
|
--english-edu-input "$ENGLISH_EDU_INPUT" \
|
||||||
--chinese-clean-input "$CHINESE_CLEAN_INPUT" \
|
--chinese-clean-input "$CHINESE_CLEAN_INPUT" \
|
||||||
--science-input "$SCIENCE_INPUT" \
|
--science-input "$SCIENCE_INPUT" \
|
||||||
|
"${LOGIC_ARGS[@]}" \
|
||||||
--jiayi-scored-input "$JIAYI_SCORED_INPUT" \
|
--jiayi-scored-input "$JIAYI_SCORED_INPUT" \
|
||||||
--code-input "$CODE_INPUT"
|
--code-input "$CODE_INPUT"
|
||||||
|
|
||||||
|
|||||||
@@ -1,32 +1,15 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
SRC="${SRC:-/mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset/train/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701}"
|
SOURCE_DATA="${SOURCE_DATA:-/mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset/train/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701}"
|
||||||
DST="${DST:-/mnt/beegfs/yi/laoyao_2b_moe/dataset/pretrain/data/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701}"
|
|
||||||
LOG="${LOG:-/mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset/logs/wait_build_rebalanced_200b_20260701_130058.log}"
|
|
||||||
|
|
||||||
mkdir -p "$(dirname "$DST")"
|
echo "Large pretraining data is intentionally not copied into this repo."
|
||||||
|
echo "Use source data path directly: $SOURCE_DATA"
|
||||||
|
|
||||||
if pgrep -f "build_rebalanced_pretrain_dataset.py --target-tokens 200000000000" >/dev/null; then
|
if [ ! -d "$SOURCE_DATA" ]; then
|
||||||
echo "pretrain builder is still running; not syncing yet" >&2
|
echo "missing source data: $SOURCE_DATA" >&2
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d "$SRC" ]; then
|
|
||||||
echo "source dataset directory does not exist: $SRC" >&2
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! grep -q "rebalanced_pretrain_done\|completed\|wrote manifest\|finished" "$LOG" 2>/dev/null; then
|
du -sh "$SOURCE_DATA" || true
|
||||||
echo "warning: completion marker not found in log; syncing existing directory anyway" >&2
|
find "$SOURCE_DATA" -maxdepth 1 -type f | wc -l | awk "{print \"file_count=\" \$1}"
|
||||||
fi
|
|
||||||
|
|
||||||
rm -rf "$DST"
|
|
||||||
mkdir -p "$DST"
|
|
||||||
if cp -al "$SRC"/. "$DST"/ 2>/tmp/laoyao_sync_cp_al.err; then
|
|
||||||
echo "synced with hardlinks: $DST"
|
|
||||||
else
|
|
||||||
echo "hardlink copy failed, falling back to rsync copy" >&2
|
|
||||||
cat /tmp/laoyao_sync_cp_al.err >&2 || true
|
|
||||||
rsync -a --info=progress2 "$SRC"/ "$DST"/
|
|
||||||
fi
|
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ set -euo pipefail
|
|||||||
REPO_ROOT="${REPO_ROOT:-/mnt/beegfs/yi/laoyao_2b_moe}"
|
REPO_ROOT="${REPO_ROOT:-/mnt/beegfs/yi/laoyao_2b_moe}"
|
||||||
IMAGE="${IMAGE:-nvcr.io/nvidia/nemo:26.06}"
|
IMAGE="${IMAGE:-nvcr.io/nvidia/nemo:26.06}"
|
||||||
CONFIG="${CONFIG:-$REPO_ROOT/training/nemo_megatron/pretrain_2b_moe_200b.yaml}"
|
CONFIG="${CONFIG:-$REPO_ROOT/training/nemo_megatron/pretrain_2b_moe_200b.yaml}"
|
||||||
DATA_DIR="$REPO_ROOT/dataset/pretrain/data/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701"
|
DATA_DIR="/mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset/train/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701"
|
||||||
|
|
||||||
if [ ! -d "$DATA_DIR" ]; then
|
if [ ! -d "$DATA_DIR" ]; then
|
||||||
echo "pretrain data is missing under repo; run scripts/sync_pretrain_data_into_repo.sh after the 200B build finishes" >&2
|
echo "pretrain source data is missing; check dataset/pretrain/manifests/rebalanced_182b_20260701_summary.json" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ experiment:
|
|||||||
|
|
||||||
paths:
|
paths:
|
||||||
model_config: /mnt/beegfs/yi/laoyao_2b_moe/model/nemo_megatron/laoyao_2b_moe_nemo_megatron.yaml
|
model_config: /mnt/beegfs/yi/laoyao_2b_moe/model/nemo_megatron/laoyao_2b_moe_nemo_megatron.yaml
|
||||||
train_data: /mnt/beegfs/yi/laoyao_2b_moe/dataset/pretrain/data/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701
|
train_data: /mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset/train/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701
|
||||||
validation_messages: /mnt/beegfs/yi/laoyao_2b_moe/dataset/val/data/heldout_2p8k.jsonl
|
validation_messages: /mnt/beegfs/yi/laoyao_2b_moe/dataset/val/data/heldout_2p8k.jsonl
|
||||||
validation_sft: /mnt/beegfs/yi/laoyao_2b_moe/dataset/val/data/heldout_2p8k_sft_prompt_completion.jsonl
|
validation_sft: /mnt/beegfs/yi/laoyao_2b_moe/dataset/val/data/heldout_2p8k_sft_prompt_completion.jsonl
|
||||||
validation_packed_text: /mnt/beegfs/yi/laoyao_2b_moe/dataset/val/data/heldout_2p8k_packed_text.jsonl
|
validation_packed_text: /mnt/beegfs/yi/laoyao_2b_moe/dataset/val/data/heldout_2p8k_packed_text.jsonl
|
||||||
|
|||||||
Reference in New Issue
Block a user