Olive은 모델 압축, 최적화, 컴파일 분야에서 업계 선도적인 기술을 결합한 사용하기 쉬운 하드웨어 인식 모델 최적화 도구입니다.
이 도구는 기계 학습 모델을 특정 하드웨어 아키텍처에 맞게 가장 효율적으로 사용할 수 있도록 최적화하는 과정을 간소화하도록 설계되었습니다.
클라우드 기반 애플리케이션이든 엣지 디바이스든 상관없이 Olive를 사용하면 모델을 손쉽고 효과적으로 최적화할 수 있습니다.
- Olive는 원하는 하드웨어 타겟에 대한 최적화 기법을 집계하고 자동화합니다.
- 모든 시나리오에 맞는 단일 최적화 기법은 없으므로, Olive는 업계 전문가들이 자신의 최적화 혁신을 플러그인 할 수 있도록 확장성을 허용합니다.
- 개발자는 종종 배포를 위해 훈련된 모델을 준비하고 최적화하기 위해 여러 하드웨어 벤더의 특정 툴체인을 배워야 합니다.
- Olive는 원하는 하드웨어에 대한 최적화 기법을 자동화하여 이 경험을 간소화합니다.
통합된 기법을 구성하고 튜닝함으로써 Olive는 엔드 투 엔드 최적화를 위한 통합 솔루션을 제공합니다. 모델을 최적화할 때 정확도와 지연 시간과 같은 제약 조건을 고려합니다.
Microsoft Olive는 생성적 인공지능 분야에서 파인 튜닝과 참조를 모두 커버할 수 있는 매우 사용하기 쉬운 오픈 소스 모델 최적화 도구입니다. 간단한 설정만으로 오픈 소스 소형 언어 모델과 관련 런타임 환경(AzureML / 로컬 GPU, CPU, DirectML)을 결합하여 자동 최적화를 통해 모델의 파인 튜닝 또는 참조를 완료하고, 최적의 모델을 찾아 클라우드나 엣지 디바이스에 배포할 수 있습니다. 이를 통해 기업은 온프레미스와 클라우드에서 자체 산업 수직 모델을 구축할 수 있습니다.
이 예제에서는 Olive를 사용하여 다음 작업을 수행합니다:
- LoRA 어댑터를 파인 튜닝하여 구문을 슬픔, 기쁨, 두려움, 놀람으로 분류합니다.
- 어댑터 가중치를 기본 모델에 병합합니다.
- 모델을 int4로 최적화하고 양자화합니다.
Microsoft Olive 설치는 매우 간단하며, CPU, GPU, DirectML, Azure ML에서도 설치할 수 있습니다.
pip install olive-ai
CPU에서 ONNX 모델을 실행하려면
pip install olive-ai[cpu]
GPU에서 ONNX 모델을 실행하려면
pip install olive-ai[gpu]
Azure ML을 사용하려면
pip install git+https://github.com/microsoft/Olive#egg=olive-ai[azureml]
알림 운영 체제 요구 사항: Ubuntu 20.04 / 22.04
설치 후 Config 파일을 통해 데이터, 컴퓨팅, 훈련, 배포, 모델 생성 등의 다양한 모델 관련 설정을 구성할 수 있습니다.
1. 데이터
Microsoft Olive에서는 로컬 데이터와 클라우드 데이터에서 훈련을 지원하며, 설정에서 구성할 수 있습니다.
로컬 데이터 설정
파인 튜닝을 위해 훈련해야 하는 데이터 세트를 json 형식으로 간단히 설정하고 데이터 템플릿에 맞게 조정할 수 있습니다. 이는 모델의 요구 사항에 따라 조정해야 합니다(예: Microsoft Phi-3-mini가 요구하는 형식에 맞게 조정). 다른 모델이 있는 경우 해당 모델의 파인 튜닝 형식 요구 사항을 참조하여 처리하십시오.
"data_configs": [
{
"name": "dataset_default_train",
"type": "HuggingfaceContainer",
"load_dataset_config": {
"params": {
"data_name": "json",
"data_files":"dataset/dataset-classification.json",
"split": "train"
}
},
"pre_process_data_config": {
"params": {
"dataset_type": "corpus",
"text_cols": [
"phrase",
"tone"
],
"text_template": "### Text: {phrase}\n### The tone is:\n{tone}",
"corpus_strategy": "join",
"source_max_len": 2048,
"pad_to_max_len": false,
"use_attention_mask": false
}
}
}
],
클라우드 데이터 소스 설정
Azure AI Studio/Azure Machine Learning Service의 데이터 저장소를 연결하여 클라우드의 데이터를 연결하고, Microsoft Fabric과 Azure Data를 통해 다양한 데이터 소스를 Azure AI Studio/Azure Machine Learning Service에 도입하여 데이터의 파인 튜닝을 지원할 수 있습니다.
"data_configs": [
{
"name": "dataset_default_train",
"type": "HuggingfaceContainer",
"load_dataset_config": {
"params": {
"data_name": "json",
"data_files": {
"type": "azureml_datastore",
"config": {
"azureml_client": {
"subscription_id": "Your Azure Subscrition ID",
"resource_group": "Your Azure Resource Group",
"workspace_name": "Your Azure ML Workspaces name"
},
"datastore_name": "workspaceblobstore",
"relative_path": "Your train_data.json Azure ML Location"
}
},
"split": "train"
}
},
"pre_process_data_config": {
"params": {
"dataset_type": "corpus",
"text_cols": [
"Question",
"Best Answer"
],
"text_template": "<|user|>\n{Question}<|end|>\n<|assistant|>\n{Best Answer}\n<|end|>",
"corpus_strategy": "join",
"source_max_len": 2048,
"pad_to_max_len": false,
"use_attention_mask": false
}
}
}
],
2. 컴퓨팅 구성
로컬에서 실행하려면 로컬 데이터 리소스를 직접 사용할 수 있습니다. Azure AI Studio / Azure Machine Learning Service의 리소스를 사용하려면 관련 Azure 매개 변수, 컴퓨팅 파워 이름 등을 구성해야 합니다.
"systems": {
"aml": {
"type": "AzureML",
"config": {
"accelerators": ["gpu"],
"hf_token": true,
"aml_compute": "Your Azure AI Studio / Azure Machine Learning Service Compute Name",
"aml_docker_config": {
"base_image": "Your Azure AI Studio / Azure Machine Learning Service docker",
"conda_file_path": "conda.yaml"
}
}
},
"azure_arc": {
"type": "AzureML",
"config": {
"accelerators": ["gpu"],
"aml_compute": "Your Azure AI Studio / Azure Machine Learning Service Compute Name",
"aml_docker_config": {
"base_image": "Your Azure AI Studio / Azure Machine Learning Service docker",
"conda_file_path": "conda.yaml"
}
}
}
},
알림
Azure AI Studio/Azure Machine Learning Service에서 컨테이너를 통해 실행되므로 필요한 환경을 구성해야 합니다. 이는 conda.yaml 환경에서 구성됩니다.
name: project_environment
channels:
- defaults
dependencies:
- python=3.8.13
- pip=22.3.1
- pip:
- einops
- accelerate
- azure-keyvault-secrets
- azure-identity
- bitsandbytes
- datasets
- huggingface_hub
- peft
- scipy
- sentencepiece
- torch>=2.2.0
- transformers
- git+https://github.com/microsoft/Olive@jiapli/mlflow_loading_fix#egg=olive-ai[gpu]
- --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/ORT-Nightly/pypi/simple/
- ort-nightly-gpu==1.18.0.dev20240307004
- --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-genai/pypi/simple/
- onnxruntime-genai-cuda
3. SLM 선택
Hugging face에서 직접 모델을 사용할 수 있으며, Azure AI Studio / Azure Machine Learning의 모델 카탈로그와 결합하여 사용할 모델을 선택할 수도 있습니다. 아래 코드 예제에서는 Microsoft Phi-3-mini를 예로 사용합니다.
로컬에 모델이 있는 경우, 이 방법을 사용할 수 있습니다
"input_model":{
"type": "PyTorchModel",
"config": {
"hf_config": {
"model_name": "model-cache/microsoft/phi-3-mini",
"task": "text-generation",
"model_loading_args": {
"trust_remote_code": true
}
}
}
},
Azure AI Studio / Azure Machine Learning Service에서 모델을 사용하려면 이 방법을 사용할 수 있습니다
"input_model":{
"type": "PyTorchModel",
"config": {
"model_path": {
"type": "azureml_registry_model",
"config": {
"name": "microsoft/Phi-3-mini-4k-instruct",
"registry_name": "azureml-msr",
"version": "11"
}
},
"model_file_format": "PyTorch.MLflow",
"hf_config": {
"model_name": "microsoft/Phi-3-mini-4k-instruct",
"task": "text-generation",
"from_pretrained_args": {
"trust_remote_code": true
}
}
}
},
알림: Azure AI Studio / Azure Machine Learning Service와 통합해야 하므로 모델 설정 시 버전 번호와 관련 명명법을 참조하십시오.
Azure의 모든 모델은 PyTorch.MLflow로 설정해야 합니다.
Hugging face 계정이 필요하며, 키를 Azure AI Studio / Azure Machine Learning의 Key 값에 바인딩해야 합니다.
4. 알고리즘
Microsoft Olive는 Lora와 QLora 파인 튜닝 알고리즘을 매우 잘 캡슐화했습니다. 몇 가지 관련 매개 변수만 구성하면 됩니다. 여기서는 QLora를 예로 들어 설명합니다.
"lora": {
"type": "LoRA",
"config": {
"target_modules": [
"o_proj",
"qkv_proj"
],
"double_quant": true,
"lora_r": 64,
"lora_alpha": 64,
"lora_dropout": 0.1,
"train_data_config": "dataset_default_train",
"eval_dataset_size": 0.3,
"training_args": {
"seed": 0,
"data_seed": 42,
"per_device_train_batch_size": 1,
"per_device_eval_batch_size": 1,
"gradient_accumulation_steps": 4,
"gradient_checkpointing": false,
"learning_rate": 0.0001,
"num_train_epochs": 3,
"max_steps": 10,
"logging_steps": 10,
"evaluation_strategy": "steps",
"eval_steps": 187,
"group_by_length": true,
"adam_beta2": 0.999,
"max_grad_norm": 0.3
}
}
},
양자화 변환을 원하면, Microsoft Olive 메인 브랜치는 이미 onnxruntime-genai 방법을 지원합니다. 필요에 따라 설정할 수 있습니다:
- 어댑터 가중치를 기본 모델에 병합
- ModelBuilder를 사용하여 필요한 정밀도로 모델을 onnx 모델로 변환
예를 들어 양자화된 INT4로 변환
"merge_adapter_weights": {
"type": "MergeAdapterWeights"
},
"builder": {
"type": "ModelBuilder",
"config": {
"precision": "int4"
}
}
알림
-
QLoRA를 사용하는 경우, ONNXRuntime-genai의 양자화 변환은 현재 지원되지 않습니다.
-
여기에서 자신의 필요에 따라 위의 단계를 설정할 수 있습니다. 위의 모든 단계를 완전히 구성할 필요는 없습니다. 필요에 따라 알고리즘의 단계를 직접 사용할 수 있습니다. 마지막으로 관련 엔진을 구성해야 합니다.
"engine": {
"log_severity_level": 0,
"host": "aml",
"target": "aml",
"search_strategy": false,
"execution_providers": ["CUDAExecutionProvider"],
"cache_dir": "../model-cache/models/phi3-finetuned/cache",
"output_dir" : "../model-cache/models/phi3-finetuned"
}
5. 파인 튜닝 완료
명령줄에서 olive-config.json 디렉토리에서 실행합니다.
olive run --config olive-config.json
면책 조항: 이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 모국어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.