چیتشیت
پایپلاینهای دادهی پیشآموزش
Pre-Training Data Pipelines
پاکسازی، حذف موارد تکراری، دانلود، توکنسازی، شاردبندی و پنجرهبندی پیکره متنی پیشآموزش. کدهای پایتون از درسها.
فهرست مطالب
وظایف
کار و کد| وظیفه | کد |
|---|---|
| اجرای دموی درس | python3 code/main.py |
| اجرای تستها | python3 -m unittest discover code/tests -v |
| حذف موارد تقریباً تکراری | deduplicate(filtered_docs, threshold=0.8) |
| بستهبندی شناسهها درون توالیها | pack_sequences(token_ids, seq_length, pad_id=0) |
| دانلود یک شارد | process_shard(plan, downloader, dedup, manifest) |
| نوشتن شاردهای HDF5 | pipeline.write_corpus(shards) |
| بررسی هشهای شارد | validate_corpus(entries) |
| خواندن یک بازه از توکنها | store.get_slice(start, stop) |
تبدیل پیکره متنی به دسته
معماریپاکسازی و فیلتر
کدpython
def clean_text(text):
text = re.sub(r"<[^>]+>", "", text) # حذف تگهای HTML
text = re.sub(r"http\S+", "", text) # حذف نشانیهای وب
text = re.sub(r"[^\x20-\x7E\n]", "", text) # فقط کاراکترهای اسکی قابل چاپ
text = re.sub(r"\n{3,}", "\n\n", text) # ادغام خطوط خالی
text = re.sub(r" {2,}", " ", text) # ادغام فاصلهها
return text.strip()
def quality_filter(text, min_words=50, max_ratio_caps=0.3, max_ratio_special=0.1):
... # خروجی False برای استابها، هرزنامههای تمامبزرگ، نویز نمادها
مراحل پاکسازی
گامبهگام- حذف HTMLفقط متن نمایان حفظ شود.
- تشخیص زبانمدل fastText با نام lid.176.bin. اطمینان زیر 0.8 به معنای انگلیسی غیرتمیز است.
- فیلتر کیفیتپرپلکسیتی بالا نسبت به مدل ویکیپدیا نشانه هرزنامه است.
- حذف موارد تکراریروش MinHash به همراه LSH. یک نسخه در ژاکارد بالای 0.8 حذف شود.
- حذف PIIرجکس برای اطلاعات هویتی ساختیافته، مدلهای NER برای اسامی.
- توکنسازی و بستهبندیدرج
tokenizer.eos_idدر انتهای هر سند.
مجموعهدادهی پنجرهی لغزان
کدpython
ds = SlidingWindowDataset(ids, context_length=16, stride=8) # مقدار None برای استراید یعنی context_length
SlidingWindowDataset.count_windows(num_ids, context_length, stride) # 1 + usable // stride
x, y = ds[0] # window[:-1], window[1:]
loader = make_dataloader(ds, batch_size=4, base_seed=7, epoch=0)
generator.manual_seed(base_seed + epoch) # سید یکسان، ترتیب یکسان
ازسرگیری یک دانلود
گامبهگام- StreamingDownloaderفایل
<shard_id>.partial.jsonرا از کنار<shard_id>.zstمیخواند. - _verify_partialحجم فایل باید برابر با
verified_bytesباشد. هش sha256 باید برابر باsha256_prefix_hexباشد. - عدم تطابقشارد و چکپوینت حذف شوند. شروع مجدد از بایت صفر.
- تطابقهدر
Rangeبه شکلbytes={resume_from}-ارسال شده و شارد در حالتabباز شود. - بررسی پاسخوضعیت باید 206 همراه با
Content-Rangeمنطبق باشد. در غیر این صورت، یک GET کامل ارسال شود. - در هر چانکاجرای
_write_checkpointباos.replaceو سپسout.write(buf).
پیشفرضهای حذف تکرار و فیلتر
پیشفرضها| تنظیم | پیشفرض | یادداشت |
|---|---|---|
min_words | 50 | رد صفحات استاب |
max_ratio_caps | 0.3 | رد هرزنامههای تمامبزرگ |
max_ratio_special | 0.1 | رد نویز نمادها |
threshold | 0.8 | ژاکارد برای حذف نسخه تکراری |
num_hashes | 128 | طول امضا |
bands | 16 | درس 03. در درس 42 از DEFAULT_BANDS = 32 استفاده میشود |
DEFAULT_SHINGLE_WIDTH | 5 | دمو از shingle_width=3 استفاده میکند |
CHUNK_BYTES | 1 << 16 | اندازهی خواندن دانلود |
پیشفرضهای ذخیرهسازی
پیشفرضها| تنظیم | پیشفرض | یادداشت |
|---|---|---|
DEFAULT_CHUNK_SIZE | 8192 | دمو از chunk_size=512 استفاده میکند |
DEFAULT_WINDOW_SIZE | 64 | خواندن window_size + 1 توکن |
BOUNDARY_TOKEN_ID | 0 | جداکننده بین اسناد |
TOKEN_DTYPE | np.uint16 | شناسههای بایتی با یک واحد جابهجایی |
maxshape | (None,) | مجموعهداده با اندازه متغیر |
libver | "latest" | برای SWMR روی نویسنده ضروری است |
اعداد و فرمولها
مفهومها- تعداد پنجرهها
max(0, 1 + (N - (T + 1)) // S)برای N شناسه، طول زمینه T، استراید S.- استراید
- مقدار
T // 2حجم مجموعهداده را دو برابر میکند. مقدار1آن را به ضریبTمیرساند. - تصادم LSH
- فرمول
1 - (1 - s^r)^bباk = b * r. - آستانه LSH
- نزدیک به
(1/b)^(1/r). برای b=32 و r=4 نزدیک به s = 0.42 است. - فشردهسازی
- انگلیسی حدود 3-4 کاراکتر به ازای هر توکن است.
- بهرهوری توالی
- زیر 90% یعنی بستهبندی توان محاسباتی را هدر میدهد.
- بازده حذف تکرار
- تیم Llama حدود 38% از دادههای وب را حذف کرد.
- چینچیلا
- پارامترها و توکنها را تقریباً به یک اندازه مقیاسدهی کنید.
عیبیابی
عیبیابیشارد ازسرگرفتهشده دادهی نامعتبر دارد
- علت
- آفست و فایل همخوانی ندارند
- راهحل
- ابتدا پیشوند sha256 را بررسی کنید
سرور هدر
Rangeرا نادیده میگیرد- علت
- وضعیت 206 نیست
- راهحل
- آن را ببندید و یک GET کامل انجام دهید
پسوند تکراری پس از قطع برق
- علت
- بایتها قبل از چکپوینت نوشته شدهاند
- راهحل
- ابتدا چکپوینت، سپس نوشتن داده
مدل یاد میگیرد صفر را پیشبینی کند
- علت
- خواننده پدینگهای صفر را میخواند
- راهحل
- برش داده در مرز
token_count
خطای «file is locked»
- علت
- عدم وجود
libver="latest"یا فعالسازی دیرهنگام SWMR - راهحل
- مجموعهدادهها را بسازید، سپس
swmr_modeرا فعال کنید
نرخ پردازش نصف میشود
- علت
- چانک با پنجره همخوانی ندارد
- راهحل
- چانک مضربی از
window_sizeباشد
اجراها بدون دلیل مشخص دچار واگرایی میشوند
- علت
- عدم تنظیم سید بر زدن دادهها
- راهحل
- ارسال
base_seedبه ازای هر اپوک
خطای
ValueErrorاز سویLSHIndex- علت
- مقدار
bandsبرnum_hashesبخشپذیر نیست - راهحل
- انتخاب اعدادی برای bands که 128 بر آنها بخشپذیر باشد
پرسش و پاسخ
پرسش و پاسخ- چرا بهجای پدینگ از بستهبندی استفاده کنیم؟
- پدینگ توان محاسباتی را روی توکنهایی که آموزنده نیستند تلف میکند.
- چرا ماسک بلوکی-قطری؟
- توکنهای سند A نباید به توکنهای سند B توجه کنند.
- برشدهنده با انتهای کوتاه داده چه میکند؟
- پنجرهی آخر را دور میاندازد.
- چرا حذف تکرار پیش از توکنسازی؟
- توکنسازی سنگین و گران است. نباید هزینهی آن را دو بار پرداخت.
- چرا برای موارد تکراری سنگ مزار ثبت شود؟
- مانیفست پیوند با سند نگهداریشده را حفظ میکند.
- چرا یک HDF5 به ازای هر شارد مبدأ؟
- در صورت کرش، حداکثر یک شارد از دست میرود.
نکات
نکتهها- فرایندهای آموزش
shards.jsonرا میخوانند، نه لیست محتویات دایرکتوری را. - پیش از اعتماد به ردیفهای شارد، هش sha256 مانیفست را در
manifest.lockبررسی کنید. - بعد از هر تغییر اندازه در حالت SWMR متد
dataset.flush()را فراخوانی کنید. - توکنها را تا حجم چانک بافر کنید، سپس اندازه را تغییر دهید. هرگز اسناد را تکتک ننویسید.
- بیشتر اجراها از استراید برابر با طول زمینه استفاده میکنند.