
이 저장소에는 작곡가 및 MosaICML 플랫폼과의 추론을 위해 LLMS 교육, 미세 조정, 평가 및 배포를위한 코드가 포함되어 있습니다. 사용하기 쉽고 효율적 이며 유연하게 설계된이 코드베이스를 사용하면 최신 기술을 빠르게 실험 할 수 있습니다.
이 저장소에서 찾을 수 있습니다.
llmfoundry/ - 모델, 데이터 세트, 콜백, 유틸리티 등에 대한 소스 코드.scripts/ - LLM 워크로드를 실행하는 스크립트data_prep/ - 텍스트 데이터 변환 원본 소스에서 StreamingDataset 형식으로 변환train/ - 125m- 70b 매개 변수의 기차 또는 Finetune Huggingface 및 MPT 모델train/benchmarking - 프로파일 교육 처리량 및 MFUinference/ - 모델 변환 모델을 Huggingface 또는 Onnx 형식으로 변환하고 응답을 생성합니다.inference/benchmarking - 프로파일 추론 대기 시간 및 처리량eval/ -학문적 (또는 맞춤형) 컨텍스트 학습 작업에 대한 LLMS 평가mcli/ - MCLI 및 MosaICML 플랫폼을 사용하여 이러한 워크로드를 시작합니다.TUTORIAL.md repo, 예제 워크 플로 및 FAQ에 대한 더 깊은 다이빙DBRX는 Databricks Mosaic Team이 교육하는 최첨단 오픈 소스 LLM입니다. MOE (Mix-of-Experts) 아키텍처를 사용하며 최적화 된 버전의 Composer, 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 사전 미세 변압기 (MPT)는 효율성을위한 플래시주의, 컨텍스트 길이 외삽을위한 Alibi 및 손실 스파이크를 완화하기위한 안정성 개선을위한 특수 기능을 갖춘 GPT 스타일 모델입니다. Mosaicml의 Foundation 시리즈의 일환으로 Open-Sourced 몇 가지 MPT 모델을 보유하고 있습니다.
| 모델 | 컨텍스트 길이 | 다운로드 | 상업용 사용? |
|---|---|---|---|
| MPT-30B | 8192 | https://huggingface.co/mosaicml/mpt-30b | 예 |
| MPT-30B-비축 | 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 차트 | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k-chat | 아니요 |
| MPT-7B | 2048 | https://huggingface.co/mosaicml/mpt-7b | 예 |
| MPT-7B-비법 | 2048 | https://huggingface.co/mosaicml/mpt-7b-instruct | 예 |
| MPT-7B-Chat | 2048 | https://huggingface.co/mosaicml/mpt-7b-chat | 아니요 |
| MPT-7B 스토리 라이터 | 65536 | https://huggingface.co/mosaicml/mpt-7b-storywriter | 예 |
이 모델을 로컬로 시험해 보려면 scripts/inference/README.md 의 지침을 따르면 HF_GENERATE.PY 또는 HF_CHAT.PY 스크립트를 사용하여 HF 모델을 프롬프트하십시오.
우리는 커뮤니티가 MPT에 넣은 놀라운 일에 압도되었습니다! 여기서 우리는 그들 중 일부에 대한 몇 가지 링크를 제공합니다.
replit-code-v1-3b 는 코드 완료에 중점을 둔 2.7B 인과 언어 모델입니다. 이 모델은 Java, Python 및 C ++와 같은 20 개 언어를 다루는 Stack Dedup v1.2 데이터 세트의 하위 집합에서 교육을 받았습니다.커뮤니티의 튜토리얼 비디오 :
빠진 것이 있습니까? PR에 기여하십시오!
이 코드베이스는 NVIDIA A100 및 H100과 함께 Pytorch 2.4로 테스트되었습니다. 이 코드베이스는 소비자 NVIDIA 카드 및 AMD 카드와 같은 다른 장치가있는 시스템에서도 작동 할 수 있지만 이러한 시스템을 적극적으로 테스트하지는 않습니다. 다른 시스템에서 LLM Foundry를 사용하여 성공/실패가있는 경우 GitHub 문제에서 알려 주시면 지원 매트릭스를 업데이트하겠습니다!
| 장치 | 토치 버전 | CUDA 버전 | 상태 |
|---|---|---|---|
| A100-40GB/80GB | 2.5.1 | 12.4 | ✅ 지원 |
| H100-80GB | 2.5.1 | 12.4 | ✅ 지원 |
사전 제작 된 Docker 이미지를 사용하는 것이 좋습니다. 여기에서 찾을 수 있습니다 : https://hub.docker.com/orgs/mosaicml/repositories.
mosaicml/pytorch 이미지는 특정 Pytorch 및 Cuda 버전에 고정되어 있으며 안정적이고 거의 업데이트되지 않습니다.
mosaicml/llm-foundry 이미지는 main 브랜치에 대한 모든 커밋마다 새로운 태그로 제작되었습니다. mosaicml/llm-foundry:2.5.1_cu124-9867a7b 선택하거나 mosaicml/llm-foundry:2.5.1_cu124-latest .
참고 : mosaicml/llm-foundry 이미지에는 llm-foundry 패키지가 사전 설치되어 있지 않습니다. 여전히 PYPI 또는 소스에서 pip install llm-foundry 해야합니다.
| 도커 이미지 | 토치 버전 | CUDA 버전 | LLM 파운드리 종속성 설치? |
|---|---|---|---|
mosaicml/pytorch:2.5.1_cu124-python3.11-ubuntu22.04 | 2.5.1 | 12.4 (인피니본) | 아니요 |
mosaicml/llm-foundry:2.5.1_cu124-latest | 2.5.1 | 12.4 (인피니본) | 예 |
mosaicml/llm-foundry:2.5.1_cu124_aws-latest | 2.5.1 | 12.4 (EFA) | 예 |
이것은 이미 pytorch, cmake 및 포장이 설치되어 있다고 가정합니다. 그렇지 않은 경우 pip install cmake packaging torch 설치할 수 있습니다.
시작하려면 저장소를 복제하고 환경을 설정하십시오. 그렇게하는 지침은 Docker를 사용하는지 여부에 따라 약간 다릅니다.
Docker 컨테이너 내부에서 LLM Foundry와 함께 작업하는 것이 좋습니다 (위의 권장 Docker Image 참조). 그렇게하는 경우 다음 단계를 따르면 저장소를 복제하고 요구 사항을 설치하십시오.
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 GPU는 FP8 지원이 있습니다. 도커 이미지에 이미 플래시주의 및 변압기를 설치했습니다 (위 참조). Docker 이미지를 사용하지 않는 경우 다음과 함께이 패키지를 설치할 수 있습니다.
pip install flash-attn --no-build-isolation
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stableTransformerEngine 층 및 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 로 다운 그레이드해야 할 경우)가 문제없이 작동하기 전에 일부 패키지를 업그레이드해야 할 수도 있습니다. Intel Gaudi 장치에서 LLM Foundry 지원은 실험적입니다. Branch habana_alpha 사용하여 지침 및 알려진 문제가있는 지점의 readme를 참조하십시오.
Intel Gaudi2 가속기에 대한 교육 및 추론 결과는 블로그를 참조하십시오 : https://www.databricks.com/blog/llm-training-and-inference-gaudi2-ai-accelerators
참고 QuickStart를 시도하기 전에 위의 설치 단계를 살펴보십시오!
다음은 C4 데이터 세트의 서브 세트를 준비하고 10 개의 배치에 대한 MPT-125M 모델을 훈련시키고 모델을 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 명령은 작곡가 라이브러리의 분산 런처를 나타냅니다.
Writ 다음과 같이 토큰을 내보내십시오.
export HF_TOKEN=your-auth-token 그리고 위의 inference/convert_composer_to_hf.py 에 대한 호출에서 --hf_repo_for_upload ... 포함하는 줄을 포함합니다.
레지스트리를 사용하여 라이브러리를 포크하지 않고 워크 플로를 사용자 정의 할 수 있습니다. 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 EntryPoint를 통해 등록 된 구성 요소를 지정할 수 있습니다. LLM Foundry에 큰 확장을 구축하고 많은 구성 요소를 무시할 경우 예상되는 사용법입니다. 엔트리 포인트를 통해 등록 된 사항은 코드에 직접 등록 된 구성 요소를 무시합니다.
예를 들어, 다음은 llm_foundry.loggers 레지스트리에 KEY my_logger 에 따라 MyLogger 클래스를 등록합니다.
[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" 엔트리 포인트를 통해 새로운 구성 요소를 개발하는 경우 파이썬 엔트리 포인트가 파이썬 환경에 전 세계적임을 알리는 것이 중요합니다. 즉, 동일한 키로 구성 요소를 등록하는 여러 개의 패키지가있는 경우 마지막으로 설치된 패키지가 사용 된 패키지가 사용됩니다. 이것은 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 Scripts를 사용하는 경우 구성 요소를 등록하려면 실행 해야하는 파일 목록 인 code_paths 인수를 제공해야합니다. 예를 들어, 다음이 포함 된 foundry_imports.py 라는 파일이있을 수 있습니다.
from foundry_registry . loggers import MyLogger
from llmfoundry . registry import loggers
loggers . register ( "my_logger" , func = MyLogger ) 그런 다음 YAML 구성의 Train/Eval 스크립트에 code_paths 제공합니다.
...
code_paths :
- foundry_imports.py
...이 중 하나는 LLM Foundry에 작은 확장을 구축하여 몇 가지 구성 요소를 무시하고 전체 패키지를 만들고 싶지 않은 경우 예상되는 사용법입니다.
LLM Foundry와의 작업에 대해 계속 배우려면 Tutorial.md를 확인하십시오. 이 자습서는 예제 워크 플로를 강조 표시하고, Repo 전체의 다른 리소스를 가리키며, 자주 묻는 질문에 대한 답변!
코드에 문제가 발생하면 Github 문제를이 리포지트에 직접 제출하십시오.
Mosaicml 플랫폼에서 LLM을 훈련 시키려면 [email protected]으로 연락하십시오!