?건축 | 신경채팅 | ?CPU에 대한 추론 | ?GPU에 대한 추론 | 예 | 문서
pip install intel-extension-for-transformers
시스템 요구 사항 및 기타 설치 팁은 설치 가이드를 참조하세요.
Intel® Extension for Transformers는 Intel Gaudi2, Intel CPU 및 Intel GPU를 포함한 다양한 Intel 플랫폼에서 Transformer 기반 모델의 최적 성능을 통해 어디서나 GenAI/LLM을 가속화하도록 설계된 혁신적인 툴킷입니다. 이 툴킷은 아래의 주요 기능과 예를 제공합니다.
Hugging Face Transformers API를 확장하고 Intel® Neural Compressor를 활용하여 Transformer 기반 모델의 모델 압축에 대한 원활한 사용자 경험
고급 소프트웨어 최적화 및 고유한 압축 인식 런타임(NeurIPS 2022의 논문 Fast Ditilbert on CPUs 및 QuaLA-MiniLM: a Quantized Length Adaptive MiniLM 및 NeurIPS 2021의 논문 Prune Once for All: Sparse Pre-Trained Language Models와 함께 출시됨)
Stable Diffusion, GPT-J-6B, GPT-NEOX, BLOOM-176B, T5, Flan-T5 등 최적화된 Transformer 기반 모델 패키지와 SetFit 기반 텍스트 분류 및 문서 수준 감정 분석 등 엔드투엔드 워크플로우 (DLSA)
NeuralChat은 지식 검색, 음성 상호 작용, 쿼리 캐싱, 보안 가드레일과 같은 다양한 플러그인 세트를 활용하여 몇 분 안에 나만의 챗봇을 만들 수 있는 맞춤형 챗봇 프레임워크입니다. 이 프레임워크는 Intel Gaudi2/CPU/GPU를 지원합니다.
GPT-NEOX, LLAMA, MPT, FALCON, BLOOM-7B, OPT, ChatGLM2-6B를 지원하는 Intel CPU 및 Intel GPU(TBD)용 가중치 전용 양자화 커널을 사용하여 순수 C/C++에서 LLM(대형 언어 모델) 추론, GPT-J-6B 및 Dolly-v2-3B. AMX, VNNI, AVX512F 및 AVX2 명령어 세트를 지원합니다. 우리는 코드명 Sapphire Rapids인 4세대 Intel Xeon Scalable 프로세서에 특히 중점을 두고 Intel CPU의 성능을 향상시켰습니다.
하드웨어 | 미세 조정 | 추론 | ||
가득한 | PEFT | 8비트 | 4비트 | |
인텔 가우디2 | ✔ | ✔ | WIP(FP8) | - |
Intel Xeon 확장 가능 프로세서 | ✔ | ✔ | ✔ (INT8, FP8) | ✔ (INT4, FP4, NF4) |
인텔 제온 CPU Max 시리즈 | ✔ | ✔ | ✔ (INT8, FP8) | ✔ (INT4, FP4, NF4) |
인텔 데이터 센터 GPU Max 시리즈 | WIP | WIP | WIP(INT8) | ✔ (INT4) |
Intel Arc A 시리즈 | - | - | WIP(INT8) | ✔ (INT4) |
인텔 코어 프로세서 | - | ✔ | ✔ (INT8, FP8) | ✔ (INT4, FP4, NF4) |
위 표에서 "-"는 해당되지 않거나 아직 시작되지 않았음을 의미합니다.
소프트웨어 | 미세 조정 | 추론 | ||
가득한 | PEFT | 8비트 | 4비트 | |
파이토치 | 2.0.1+CPU, 2.0.1a0(GPU) | 2.0.1+CPU, 2.0.1a0(GPU) | 2.1.0+CPU, 2.0.1a0(GPU) | 2.1.0+CPU, 2.0.1a0(GPU) |
PyTorch용 인텔® 확장 | 2.1.0+CPU, 2.0.110+xpu | 2.1.0+CPU, 2.0.110+xpu | 2.1.0+CPU, 2.0.110+xpu | 2.1.0+CPU, 2.0.110+xpu |
트랜스포머 | 4.35.2(CPU), 4.31.0(인텔 GPU) | 4.35.2(CPU), 4.31.0(인텔 GPU) | 4.35.2(CPU), 4.31.0(인텔 GPU) | 4.35.2(CPU), 4.31.0(인텔 GPU) |
시냅스 AI | 1.13.0 | 1.13.0 | 1.13.0 | 1.13.0 |
가우디2 드라이버 | 1.13.0-ee32e42 | 1.13.0-ee32e42 | 1.13.0-ee32e42 | 1.13.0-ee32e42 |
인텔 레벨 제로 GPU | 1.3.26918.50-736~22.04 | 1.3.26918.50-736~22.04 | 1.3.26918.50-736~22.04 | 1.3.26918.50-736~22.04 |
CPU, Gaudi2, Intel GPU의 세부 요구사항을 참조하세요.
우분투 20.04/22.04, 센토스 8.
다음은 챗봇을 생성하는 샘플 코드입니다. 더 많은 예시를 확인하세요.
NeuralChat은 채팅용 OpenAI 호환 RESTful API를 제공하므로 NeuralChat을 OpenAI API의 드롭인 대체품으로 사용할 수 있습니다. Shell 명령이나 Python 코드를 사용하여 NeuralChat 서버를 시작할 수 있습니다.
# Shell Command
neuralchat_server start --config_file ./server/config/neuralchat.yaml
# Python Code
from intel_extension_for_transformers . neural_chat import NeuralChatServerExecutor
server_executor = NeuralChatServerExecutor ()
server_executor ( config_file = "./server/config/neuralchat.yaml" , log_file = "./neuralchat.log" )
NeuralChat 서비스는 OpenAI 클라이언트 라이브러리, curl
명령, requests
라이브러리를 통해 접근할 수 있습니다. NeuralChat에서 더 많은 내용을 확인하세요.
from intel_extension_for_transformers . neural_chat import build_chatbot
chatbot = build_chatbot ()
response = chatbot . predict ( "Tell me about Intel Xeon Scalable Processors." )
다음은 확장된 Transformers API를 사용하는 샘플 코드입니다. 더 많은 예시를 확인하세요.
CPU에서 LLM 낮은 비트 추론의 최신 기능(예: GGUF 지원)을 얻으려면 NeuralSpeed를 설치하는 것이 좋습니다. 문서에 따라 NeuralSpeed 없이 v1.3을 사용할 수도 있습니다.
from transformers import AutoTokenizer
from intel_extension_for_transformers . transformers import AutoModelForCausalLM
model_name = "Intel/neural-chat-7b-v3-1"
prompt = "Once upon a time, there existed a little girl,"
tokenizer = AutoTokenizer . from_pretrained ( model_name , trust_remote_code = True )
inputs = tokenizer ( prompt , return_tensors = "pt" ). input_ids
model = AutoModelForCausalLM . from_pretrained ( model_name , load_in_4bit = True )
outputs = model . generate ( inputs )
Huggingface에서 GGUF 형식 모델을 로드할 수도 있습니다. 현재는 Q4_0/Q5_0/Q8_0 gguf 형식만 지원합니다.
from transformers import AutoTokenizer
from intel_extension_for_transformers . transformers import AutoModelForCausalLM
# Specify the GGUF repo on the Hugginface
model_name = "TheBloke/Llama-2-7B-Chat-GGUF"
# Download the the specific gguf model file from the above repo
gguf_file = "llama-2-7b-chat.Q4_0.gguf"
# make sure you are granted to access this model on the Huggingface.
tokenizer_name = "meta-llama/Llama-2-7b-chat-hf"
prompt = "Once upon a time, there existed a little girl,"
tokenizer = AutoTokenizer . from_pretrained ( tokenizer_name , trust_remote_code = True )
inputs = tokenizer ( prompt , return_tensors = "pt" ). input_ids
model = AutoModelForCausalLM . from_pretrained ( model_name , gguf_file = gguf_file )
outputs = model . generate ( inputs )
Modelscope에서 PyTorch 모델을 로드할 수도 있습니다.
참고 :modelscope가 필요합니다.
from transformers import TextStreamer
from modelscope import AutoTokenizer
from intel_extension_for_transformers . transformers import AutoModelForCausalLM
model_name = "qwen/Qwen-7B" # Modelscope model_id or local model
prompt = "Once upon a time, there existed a little girl,"
model = AutoModelForCausalLM . from_pretrained ( model_name , load_in_4bit = True , model_hub = "modelscope" )
tokenizer = AutoTokenizer . from_pretrained ( model_name , trust_remote_code = True )
inputs = tokenizer ( prompt , return_tensors = "pt" ). input_ids
streamer = TextStreamer ( tokenizer )
outputs = model . generate ( inputs , streamer = streamer , max_new_tokens = 300 )
GPTQ/AWQ/RTN/AutoRound 알고리즘으로 양자화된 낮은 비트 모델을 로드할 수도 있습니다.
from transformers import AutoTokenizer
from intel_extension_for_transformers . transformers import AutoModelForCausalLM , GPTQConfig
# Hugging Face GPTQ/AWQ model or use local quantize model
model_name = "MODEL_NAME_OR_PATH"
prompt = "Once upon a time, a little girl"
tokenizer = AutoTokenizer . from_pretrained ( model_name , trust_remote_code = True )
inputs = tokenizer ( prompt , return_tensors = "pt" ). input_ids
model = AutoModelForCausalLM . from_pretrained ( model_name , trust_remote_code = True )
outputs = model . generate ( inputs )
import intel_extension_for_pytorch as ipex
from intel_extension_for_transformers . transformers . modeling import AutoModelForCausalLM
from transformers import AutoTokenizer
import torch
device_map = "xpu"
model_name = "Qwen/Qwen-7B"
tokenizer = AutoTokenizer . from_pretrained ( model_name , trust_remote_code = True )
prompt = "Once upon a time, there existed a little girl,"
inputs = tokenizer ( prompt , return_tensors = "pt" ). input_ids . to ( device_map )
model = AutoModelForCausalLM . from_pretrained ( model_name , trust_remote_code = True ,
device_map = device_map , load_in_4bit = True )
model = ipex . optimize_transformers ( model , inplace = True , dtype = torch . float16 , quantization_config = True , device = device_map )
output = model . generate ( inputs )
참고: 자세한 내용은 예제와 스크립트를 참조하세요.
다음은 확장된 Langchain API를 사용하는 샘플 코드입니다. 더 많은 예시를 확인하세요.
from langchain_community . llms . huggingface_pipeline import HuggingFacePipeline
from langchain . chains import RetrievalQA
from langchain_core . vectorstores import VectorStoreRetriever
from intel_extension_for_transformers . langchain . vectorstores import Chroma
retriever = VectorStoreRetriever ( vectorstore = Chroma (...))
retrievalQA = RetrievalQA . from_llm ( llm = HuggingFacePipeline (...), retriever = retriever )
릴리스 데이터 또는 Medium 블로그에서 검증된 모델, 정확성 및 성능에 액세스할 수 있습니다.
개요 | |||||||
---|---|---|---|---|---|---|---|
신경채팅 | 신경 속도 | ||||||
신경채팅 | |||||||
Intel CPU의 챗봇 | Intel GPU의 챗봇 | 가우디의 챗봇 | |||||
클라이언트의 챗봇 | 더 많은 노트북 | ||||||
신경 속도 | |||||||
신경 속도 | 스트리밍 LLM | 낮은 정밀도 커널 | 텐서 병렬성 | ||||
LLM 압축 | |||||||
스무스퀀트(INT8) | 가중치 전용 양자화(INT4/FP4/NF4/INT8) | CPU의 QLoRA | |||||
일반 압축 | |||||||
양자화 | 전정 | 증류 | 관현악법 | ||||
데이터 증대 | 내보내다 | 측정항목 | 목표 | ||||
관로 | 길이 적응형 | 조기 종료 | |||||
튜토리얼 및 결과 | |||||||
튜토리얼 | LLM 목록 | 일반 모델 목록 | 모델 성능 |
전체 출판물 목록 보기
뛰어난 오픈 소스 프로젝트: bitandbytes, FastChat, fastRAG, ggml, gptq, llama.cpp, lm-evauation-harness, peft, trl, Streamingllm 등.
모든 기여자에게 감사드립니다.
모델 압축 기술 및 LLM 기반 챗봇 개발에 대한 흥미로운 아이디어를 제안해 주셔서 감사합니다! 언제든지 저희에게 연락해 주세요. Transformers용 인텔 확장에 대한 협력을 기대합니다!