
พื้นที่เก็บข้อมูลนี้มีรหัสสำหรับการฝึกอบรม finetuning การประเมินและการปรับใช้ LLMs สำหรับการอนุมานกับนักแต่งเพลงและแพลตฟอร์ม MosaicML ออกแบบมาเพื่อใช้งานง่ายมีประสิทธิภาพ และ ยืดหยุ่น codebase นี้ช่วยให้การทดลองอย่างรวดเร็วด้วยเทคนิคล่าสุด
คุณจะพบใน repo นี้:
llmfoundry/ - ซอร์สโค้ดสำหรับรุ่น, ชุดข้อมูล, การโทรกลับ, ยูทิลิตี้ ฯลฯscripts/ - สคริปต์เพื่อเรียกใช้เวิร์กโหลด LLMdata_prep/ - แปลงข้อมูลข้อความจากแหล่งต้นฉบับเป็นรูปแบบ StreamingDataSettrain/ - รถไฟหรือ Finetune HuggingFace และ MPT รุ่นจากพารามิเตอร์ 125m - 70btrain/benchmarking - ปริมาณการฝึกอบรมโปรไฟล์และ MFUinference/ - แปลงโมเดลเป็น huggingface หรือ onnx รูปแบบและสร้างคำตอบinference/benchmarking - เวลาแฝงการอนุมานและปริมาณงานeval/ -ประเมิน LLMs เกี่ยวกับงานวิชาการ (หรือกำหนดเอง) งานในบริบทการเรียนรู้mcli/ - เปิดเวิร์กโหลดใด ๆ เหล่านี้โดยใช้ MCLI และแพลตฟอร์ม MOSAICMLTUTORIAL.md - ดำน้ำลึกลงไปใน repo, ตัวอย่างเวิร์กโฟลว์และคำถามที่พบบ่อยDBRX เป็น LLM โอเพนซอร์สที่ล้ำสมัยที่ได้รับการฝึกฝนโดยทีม Databricks Mosaic มันใช้สถาปัตยกรรมผสม (MOE) และได้รับการฝึกฝนด้วยนักแต่งเพลงรุ่นที่เหมาะสม LLM Foundry และ Megablocks โมเดลมีพารามิเตอร์ทั้งหมด 132B และพารามิเตอร์ที่ใช้งาน 36B เราได้เปิดตัว DBRX สองรุ่น:
| แบบอย่าง | ความยาวบริบท | การดาวน์โหลด |
|---|---|---|
| ฐาน DBRX | 32768 | https://huggingface.co/databricks/dbrx-base |
| dbrx สั่ง | 32768 | https://huggingface.co/databricks/dbrx-instruct |
น้ำหนักและรหัสโมเดลของเราได้รับอนุญาตสำหรับทั้งนักวิจัยและหน่วยงานเชิงพาณิชย์ ใบอนุญาตโอเพ่นซอร์ส Databricks สามารถดูได้ที่ใบอนุญาตและนโยบายการใช้งานที่ยอมรับได้ของเราสามารถพบได้ที่นี่
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรุ่น DBRX ดูที่ https://github.com/databricks/dbrx
Mosaic Pretrained Transformers (MPT) เป็นรุ่นสไตล์ GPT ที่มีคุณสมบัติพิเศษบางอย่าง-ความสนใจแฟลชเพื่อประสิทธิภาพข้อแก้ตัวสำหรับการคาดการณ์ความยาวบริบทและการปรับปรุงความมั่นคงเพื่อลดการสูญเสีย spikes ในฐานะส่วนหนึ่งของซีรี่ส์พื้นฐานของ MosaicML เรามีรุ่น MPT หลายรุ่นที่เปิดกว้าง:
| แบบอย่าง | ความยาวบริบท | การดาวน์โหลด | การใช้งานเชิงพาณิชย์? |
|---|---|---|---|
| MPT-30B | 8192 | https://huggingface.co/mosaicml/mpt-30b | ใช่ |
| MPT-30B-Instruct | 8192 | https://huggingface.co/mosaicml/mpt-30b-instruct | ใช่ |
| mpt-30b-chat | 8192 | https://huggingface.co/mosaicml/mpt-30b-chat | เลขที่ |
| MPT-7B-8K | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k | ใช่ |
| mpt-7b-8k-chat | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k-chat | เลขที่ |
| MPT-7B | 2048 | https://huggingface.co/mosaicml/mpt-7b | ใช่ |
| MPT-7B-Instruct | 2048 | https://huggingface.co/mosaicml/mpt-7b-instruct | ใช่ |
| mpt-7b-chat | 2048 | https://huggingface.co/mosaicml/mpt-7b-chat | เลขที่ |
| MPT-7B-StoryWriter | 65536 | https://huggingface.co/mosaicml/mpt-7b-storywriter | ใช่ |
หากต้องการลองใช้โมเดลเหล่านี้ในเครื่องให้ทำตามคำแนะนำใน scripts/inference/README.md เพื่อแจ้งรุ่น HF โดยใช้สคริปต์ hf_generate.py หรือ hf_chat.py ของเรา
เราได้รับผลงานที่น่าทึ่งทั้งหมดที่ชุมชนได้ใส่ลงไปใน MPT! ที่นี่เราให้ลิงก์บางส่วนแก่บางส่วน:
replit-code-v1-3b เป็นรูปแบบภาษาเชิงสาเหตุ 2.7B ที่มุ่งเน้นไปที่การสมบูรณ์ของรหัส โมเดลได้รับการฝึกอบรมเกี่ยวกับชุดย่อยของชุดข้อมูลสแต็ก dedup v1.2 ครอบคลุม 20 ภาษาเช่น Java, Python และ C ++วิดีโอการสอนจากชุมชน:
มีอะไรขาดหายไป? มีส่วนร่วมกับ PR!
codebase นี้ได้รับการทดสอบด้วย Pytorch 2.4 กับ Nvidia A100S และ H100S codebase นี้อาจทำงานกับระบบกับอุปกรณ์อื่น ๆ เช่นการ์ดผู้บริโภค Nvidia และการ์ด AMD แต่เราไม่ได้ทดสอบระบบเหล่านี้อย่างแข็งขัน หากคุณประสบความสำเร็จ/ล้มเหลวโดยใช้ LLM Foundry ในระบบอื่น ๆ โปรดแจ้งให้เราทราบในปัญหา GitHub และเราจะอัปเดตเมทริกซ์สนับสนุน!
| อุปกรณ์ | คบเพลิงเวอร์ชัน | CUDA เวอร์ชัน | สถานะ |
|---|---|---|---|
| A100-40GB/80GB | 2.5.1 | 12.4 | ✅สนับสนุน |
| H100-80GB | 2.5.1 | 12.4 | ✅สนับสนุน |
เราขอแนะนำให้ใช้ภาพนักเทียบท่าที่สร้างไว้ล่วงหน้าของเรา คุณสามารถค้นหาได้ที่นี่: https://hub.docker.com/orgs/mosaicml/repositories
ภาพ mosaicml/pytorch ถูกตรึงไว้ในรุ่น pytorch และ cuda ที่เฉพาะเจาะจงและมีความเสถียรและไม่ค่อยได้รับการปรับปรุง
ภาพ mosaicml/llm-foundry ถูกสร้างขึ้นด้วยแท็กใหม่ทุกครั้งที่ให้ความสำคัญกับสาขา main คุณสามารถเลือกแฮช commit ที่เฉพาะเจาะจงเช่น mosaicml/llm-foundry:2.5.1_cu124-9867a7b หรือใช้งานล่าสุดโดยใช้ mosaicml/llm-foundry:2.5.1_cu124-latest
โปรดทราบ: ภาพ mosaicml/llm-foundry ไม่ได้มาพร้อมกับแพ็คเกจ llm-foundry ที่ติดตั้งไว้ล่วงหน้าเพียงแค่การพึ่งพา คุณจะยังคงต้อง pip install llm-foundry จาก PYPI หรือจากแหล่งที่มา
| ภาพนักเทียบท่า | คบเพลิงเวอร์ชัน | CUDA เวอร์ชัน | ติดตั้ง LLM Foundry ติดตั้งหรือไม่? |
|---|---|---|---|
mosaicml/pytorch:2.5.1_cu124-python3.11-ubuntu22.04 | 2.5.1 | 12.4 (Infiniband) | เลขที่ |
mosaicml/llm-foundry:2.5.1_cu124-latest | 2.5.1 | 12.4 (Infiniband) | ใช่ |
mosaicml/llm-foundry:2.5.1_cu124_aws-latest | 2.5.1 | 12.4 (EFA) | ใช่ |
สิ่งนี้จะถือว่าคุณมี pytorch, cmake และการติดตั้งบรรจุภัณฑ์แล้ว ถ้าไม่คุณสามารถติดตั้งด้วย pip install cmake packaging torch
ในการเริ่มต้นใช้โคลน repo และตั้งค่าสภาพแวดล้อมของคุณ คำแนะนำที่จะทำแตกต่างกันเล็กน้อยขึ้นอยู่กับว่าคุณกำลังใช้ Docker หรือไม่
เราขอแนะนำ อย่างยิ่ง ให้ทำงานกับ LLM Foundry ภายในคอนเทนเนอร์ Docker (ดูภาพนักเทียบท่าที่เราแนะนำด้านบน) หากคุณกำลังทำเช่นนั้นให้ทำตามขั้นตอนเหล่านี้เพื่อโคลน repo และติดตั้งข้อกำหนด
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
pip install -e " .[gpu] " # or `pip install -e .` if no NVIDIA GPU.หากคุณเลือกที่จะไม่ใช้ Docker คุณควรสร้างและใช้สภาพแวดล้อมเสมือนจริง
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
# Creating and activate a virtual environment
python3 -m venv llmfoundry-venv
source llmfoundry-venv/bin/activate
pip install cmake packaging torch # setup.py requires these be installed
pip install -e " .[gpu] " # or `pip install -e .` if no NVIDIA GPU.Nvidia H100 GPUs มีการสนับสนุน FP8; เราได้ติดตั้งความสนใจของแฟลชและหม้อแปลงในภาพนักเทียบท่าของเราแล้ว (ดูด้านบน) หากคุณไม่ได้ใช้อิมเมจนักเทียบท่าของเราคุณสามารถติดตั้งแพ็คเกจเหล่านี้ได้ด้วย:
pip install flash-attn --no-build-isolation
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stableดูที่นี่สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการเปิดใช้งานเลเยอร์ TransformerEngine และ AMP_FP8
ในการทดสอบ AMD GPU ของเราการตั้งค่า ENV รวมถึง:
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
# Creating and activate a virtual environment
python3 -m venv llmfoundry-venv-amd
source llmfoundry-venv-amd/bin/activate
# installs
pip install cmake packaging torch
pip install -e . # This installs some things that are not needed but they don't hurt
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2สุดท้าย ติดตั้ง ROCM ที่เปิดใช้งานแฟลชความสนใจ (คำแนะนำที่นี่)
หมายเหตุ:
numpy==1.23.5 ) ก่อนที่ทุกอย่างจะทำงานโดยไม่มีปัญหา การสนับสนุน LLM Foundry บนอุปกรณ์ Intel Gaudi เป็นการทดลองโปรดใช้ Branch habana_alpha และดู readme ในสาขานั้นซึ่งมีคำแนะนำในการติดตั้งและปัญหาที่รู้จัก
สำหรับผลการฝึกอบรมและการอนุมานผลการดำเนินงานเกี่ยวกับตัวเร่งความเร็ว Intel Gaudi2 ดูบล็อกของเรา: https://www.databricks.com/blog/llm-training-and-inference-intel-gaudi2-ai-accelerators
หมายเหตุตรวจ สอบให้แน่ใจว่าได้ผ่านขั้นตอนการติดตั้งด้านบนก่อนที่จะลองใช้ quickstart!
นี่คือเวิร์กโฟลว์แบบ end-to-end สำหรับการเตรียมชุดย่อยของชุดข้อมูล C4, การฝึกอบรมโมเดล MPT-125M สำหรับ 10 ชุด, แปลงโมเดลเป็นรูปแบบ HuggingFace, การประเมินแบบจำลองในการท้าทาย Winograd และสร้างคำตอบ
(จำไว้ว่านี่เป็นจุดเริ่มต้นอย่างรวดเร็วเพียงเพื่อแสดงให้เห็นถึงเครื่องมือ - เพื่อให้ได้คุณภาพที่ดี LLM จะต้องได้รับการฝึกฝนมานานกว่า 10 แบทช์?)
cd scripts
# Convert C4 dataset to StreamingDataset format
python data_prep/convert_dataset_hf.py
--dataset allenai/c4 --data_subset en
--out_root my-copy-c4 --splits train_small val_small
--concat_tokens 2048 --tokenizer EleutherAI/gpt-neox-20b --eos_text ' <|endoftext|> '
# Train an MPT-125m model for 10 batches
composer train/train.py
train/yamls/pretrain/mpt-125m.yaml
variables.data_local=my-copy-c4
train_loader.dataset.split=train_small
eval_loader.dataset.split=val_small
max_duration=10ba
eval_interval=0
save_folder=mpt-125m
# Convert the model to HuggingFace format
python inference/convert_composer_to_hf.py
--composer_path mpt-125m/ep0-ba10-rank0.pt
--hf_output_path mpt-125m-hf
--output_precision bf16
# --hf_repo_for_upload user-org/repo-name
# Evaluate the model on a subset of tasks
composer eval/eval.py
eval/yamls/hf_eval.yaml
icl_tasks=eval/yamls/copa.yaml
model_name_or_path=mpt-125m-hf
# Generate responses to prompts
python inference/hf_generate.py
--name_or_path mpt-125m-hf
--max_new_tokens 256
--prompts
" The answer to life, the universe, and happiness is "
" Here's a quick recipe for baking chocolate chip cookies: Start by " หมายเหตุ: คำสั่ง composer ที่ใช้ด้านบนเพื่อฝึกอบรมโมเดลหมายถึงตัวเรียกใช้งานแบบกระจายของไลบรารีของนักแต่งเพลง
หากคุณมีโทเค็น Auth HuggingFace ที่เปิดใช้งานการเขียนคุณสามารถเลือกอัปโหลดโมเดลของคุณไปยังฮับได้! เพียงส่งออกโทเค็นของคุณเช่นนี้:
export HF_TOKEN=your-auth-token และไม่ทำให้ไม่รู้สึกถึงบรรทัดที่มี --hf_repo_for_upload ... ในการเรียกข้างต้นไปยัง inference/convert_composer_to_hf.py
คุณสามารถใช้รีจิสทรีเพื่อปรับแต่งเวิร์กโฟลว์ของคุณโดยไม่ต้องใช้ไลบรารี ส่วนประกอบบางอย่างของ LLM Foundry สามารถลงทะเบียนได้เช่นโมเดลคนตัดไม้และการโทรกลับ ซึ่งหมายความว่าคุณสามารถลงทะเบียนตัวเลือกใหม่สำหรับส่วนประกอบเหล่านี้แล้วใช้ในการกำหนดค่า YAML ของคุณ
เพื่อช่วยค้นหาและเข้าใจส่วนประกอบที่ลงทะเบียนได้คุณสามารถใช้คำสั่ง llmfoundry registry CLI
เรามีคำสั่งสองคำในปัจจุบัน:
llmfoundry registry get [--group] : แสดงรายการการลงทะเบียนทั้งหมดและส่วนประกอบของพวกเขาเลือกระบุรีจิสทรีเฉพาะ ตัวอย่างการใช้งาน: llmfoundry registry get --group loggers หรือ llmfoundry registry getllmfoundry registry find <group> <name> : รับข้อมูลเกี่ยวกับองค์ประกอบที่ลงทะเบียนเฉพาะ ตัวอย่างการใช้งาน: llmfoundry registry find loggers wandb ใช้ --help ช่วยเหลือคำสั่งใด ๆ เหล่านี้สำหรับข้อมูลเพิ่มเติม
คำสั่งเหล่านี้ยังสามารถช่วยให้คุณเข้าใจว่าแต่ละรีจิสทรีประกอบด้วยอะไรบ้างเนื่องจากรีจิสทรีแต่ละตัวมีเอกสารที่จะพิมพ์ออกมา แนวคิดทั่วไปคือแต่ละรีจิสทรีกำหนดอินเทอร์เฟซและส่วนประกอบที่ลงทะเบียนกับรีจิสทรีนั้นจะต้องใช้อินเทอร์เฟซนั้น หากมีส่วนหนึ่งของห้องสมุดที่ไม่สามารถขยายได้ในปัจจุบัน แต่คุณคิดว่าควรจะเป็นโปรดเปิดปัญหา!
มีหลายวิธีในการลงทะเบียนองค์ประกอบใหม่:
คุณสามารถระบุส่วนประกอบที่ลงทะเบียนผ่านจุดเข้า Python หากคุณกำลังสร้างแพ็คเกจของคุณเองด้วยส่วนประกอบที่ลงทะเบียน นี่จะเป็นการใช้งานที่คาดหวังหากคุณกำลังสร้างส่วนขยายขนาดใหญ่ไปยัง LLM Foundry และจะเอาชนะองค์ประกอบมากมาย โปรดทราบว่าสิ่งที่ลงทะเบียนผ่านจุดเข้าใช้จะแทนที่ส่วนประกอบที่ลงทะเบียนโดยตรงในรหัส
ตัวอย่างเช่นต่อไปนี้จะลงทะเบียนคลาส MyLogger ภายใต้คีย์ my_logger ใน llm_foundry.loggers registry:
[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "foundry_registry"
version = "0.1.0"
dependencies = [
" mosaicml " ,
" llm-foundry " ,
]
# Note: Even though in python code, this would be llmfoundry.registry.loggers,
# when specified in the entry_points, it has to be "llmfoundry_loggers". That is,
# the segments of the name should be joined by an _ in the entry_points section.
[project.entry-points."llmfoundry_loggers"]
my_logger = "foundry_registry.loggers:MyLogger" หากการพัฒนาส่วนประกอบใหม่ผ่านจุดเข้าใช้งานเป็นสิ่งสำคัญที่จะต้องทราบว่า Python entrypoints เป็นทั่วโลกกับสภาพแวดล้อม Python ซึ่งหมายความว่าหากคุณมีหลายแพ็คเกจที่ลงทะเบียนส่วนประกอบที่มีคีย์เดียวกันการติดตั้งสุดท้ายจะเป็นแพ็คเกจที่ใช้ สิ่งนี้มีประโยชน์สำหรับการเอาชนะส่วนประกอบใน LLM Foundry แต่ยังสามารถนำไปสู่พฤติกรรมที่ไม่คาดคิดได้หากไม่ระวัง นอกจากนี้หากคุณเปลี่ยน pyproject.toml คุณจะต้องติดตั้งแพ็คเกจใหม่สำหรับการเปลี่ยนแปลงเพื่อให้มีผล คุณสามารถทำได้อย่างรวดเร็วโดยการติดตั้งด้วย pip install -e . --no-deps เพื่อหลีกเลี่ยงการติดตั้งการพึ่งพาใหม่
นอกจากนี้คุณยังสามารถลงทะเบียนส่วนประกอบได้โดยตรงในรหัสของคุณ:
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
class MyLogger ( LoggerDestination ):
pass
loggers . register ( "my_logger" , func = MyLogger )คุณยังสามารถใช้งานตกแต่งเพื่อลงทะเบียนส่วนประกอบโดยตรงจากรหัสของคุณ:
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
@ loggers . register ( "my_logger" )
class MyLogger ( LoggerDestination ):
pass สำหรับทั้งแนวทางการโทรและมัณฑนากรโดยตรงหากใช้สคริปต์ LLM Foundry Train/Eval Eval คุณจะต้องระบุอาร์กิวเมนต์ code_paths ซึ่งเป็นรายการไฟล์ที่จำเป็นต้องดำเนินการเพื่อลงทะเบียนส่วนประกอบของคุณ ตัวอย่างเช่นคุณอาจมีไฟล์ที่เรียกว่า foundry_imports.py ที่มีสิ่งต่อไปนี้:
from foundry_registry . loggers import MyLogger
from llmfoundry . registry import loggers
loggers . register ( "my_logger" , func = MyLogger ) จากนั้นคุณจะให้ code_paths ไปยังสคริปต์รถไฟ/eval ในการกำหนดค่า YAML ของคุณ:
...
code_paths :
- foundry_imports.py
...หนึ่งในสิ่งเหล่านี้คือการใช้งานที่คาดหวังหากคุณกำลังสร้างส่วนขยายเล็ก ๆ ไปยัง LLM Foundry มีเพียงส่วนประกอบสองสามส่วนเท่านั้นและไม่ต้องการสร้างแพ็คเกจทั้งหมด
ตรวจสอบ Tutorial.md เพื่อเรียนรู้เกี่ยวกับการทำงานกับ LLM Foundry บทช่วยสอนเน้นตัวอย่างเวิร์กโฟลว์ชี้ให้คุณไปยังแหล่งข้อมูลอื่น ๆ ตลอดทั้ง Repo และตอบคำถามที่พบบ่อย!
หากคุณพบปัญหาใด ๆ กับรหัสโปรดยื่นปัญหา GitHub ไปยัง repo นี้โดยตรง
หากคุณต้องการฝึก LLMS บนแพลตฟอร์ม MosaicML ติดต่อเราที่ [email protected]!