?Arquitetura | NeuralChat | ?Inferência na CPU | ?Inferência em GPU | Exemplos | Documentações
pip install intel-extension-for-transformers
Para requisitos do sistema e outras dicas de instalação, consulte o Guia de Instalação
Intel® Extension for Transformers é um kit de ferramentas inovador projetado para acelerar GenAI/LLM em qualquer lugar com o desempenho ideal de modelos baseados em Transformer em várias plataformas Intel, incluindo Intel Gaudi2, Intel CPU e Intel GPU. O kit de ferramentas fornece os principais recursos e exemplos abaixo:
Experiência de usuário perfeita de compactações de modelo em modelos baseados em Transformer, estendendo as APIs dos transformadores Hugging Face e aproveitando o Intel® Neural Compressor
Otimizações avançadas de software e tempo de execução exclusivo com reconhecimento de compressão (lançado com o artigo Fast Distilbert on CPUs and QuaLA-MiniLM: a Quantized Length Adaptive MiniLM do NeurIPS 2022 e o artigo Prune Once for All: Sparse Pre-Trained Language Models do NeurIPS 2021)
Pacotes de modelos otimizados baseados em Transformer, como Stable Diffusion, GPT-J-6B, GPT-NEOX, BLOOM-176B, T5, Flan-T5 e fluxos de trabalho de ponta a ponta, como classificação de texto baseada em SetFit e análise de sentimento em nível de documento (DLSA)
NeuralChat, uma estrutura de chatbot personalizável para criar seu próprio chatbot em minutos, aproveitando um rico conjunto de plug-ins, como recuperação de conhecimento, interação de fala, cache de consulta e proteção de segurança. Esta estrutura suporta Intel Gaudi2/CPU/GPU.
Inferência de Large Language Model (LLM) em C/C++ puro com kernels de quantização somente de peso para CPU Intel e GPU Intel (TBD), suportando GPT-NEOX, LLAMA, MPT, FALCON, BLOOM-7B, OPT, ChatGLM2-6B, GPT-J-6B e Dolly-v2-3B. Suporta conjunto de instruções AMX, VNNI, AVX512F e AVX2. Aumentamos o desempenho das CPUs Intel, com foco particular no processador escalável Intel Xeon de 4ª geração, codinome Sapphire Rapids.
Hardware | Afinação | Inferência | ||
Completo | PEFT | 8 bits | 4 bits | |
Intel Gaudí2 | ✔ | ✔ | WIP (FP8) | - |
Processadores escaláveis Intel Xeon | ✔ | ✔ | ✔ (INT8, FP8) | ✔ (INT4, FP4, NF4) |
Série Intel Xeon CPU Max | ✔ | ✔ | ✔ (INT8, FP8) | ✔ (INT4, FP4, NF4) |
Série Intel Data Center GPU Max | WIP | WIP | WIP (INT8) | ✔ (INT4) |
Intel Arc Série A | - | - | WIP (INT8) | ✔ (INT4) |
Processadores Intel Core | - | ✔ | ✔ (INT8, FP8) | ✔ (INT4, FP4, NF4) |
Na tabela acima, “-” significa não aplicável ou ainda não iniciado.
Programas | Afinação | Inferência | ||
Completo | PEFT | 8 bits | 4 bits | |
PyTorch | 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) |
Extensão Intel® para 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 |
Transformadores | 4.35.2 (CPU), 4.31.0 (GPU Intel) | 4.35.2 (CPU), 4.31.0 (GPU Intel) | 4.35.2 (CPU), 4.31.0 (GPU Intel) | 4.35.2 (CPU), 4.31.0 (GPU Intel) |
IA de sinapse | 1.13.0 | 1.13.0 | 1.13.0 | 1.13.0 |
Motorista Gaudí2 | 1.13.0-ee32e42 | 1.13.0-ee32e42 | 1.13.0-ee32e42 | 1.13.0-ee32e42 |
Intel-nível-zero-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 |
Consulte os requisitos detalhados em CPU, Gaudi2, GPU Intel.
Ubuntu 20.04/22.04, Centos 8.
Abaixo está o código de exemplo para criar seu chatbot. Veja mais exemplos.
NeuralChat fornece APIs RESTful compatíveis com OpenAI para bate-papo, para que você possa usar NeuralChat como um substituto imediato para APIs OpenAI. Você pode iniciar o servidor NeuralChat usando o comando Shell ou o código Python.
# 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" )
O serviço NeuralChat pode ser acessível por meio da biblioteca cliente OpenAI, comandos curl
e biblioteca requests
. Veja mais em NeuralChat.
from intel_extension_for_transformers . neural_chat import build_chatbot
chatbot = build_chatbot ()
response = chatbot . predict ( "Tell me about Intel Xeon Scalable Processors." )
Abaixo está o código de exemplo para usar as APIs estendidas do Transformers. Veja mais exemplos.
Recomendamos que você instale o NeuralSpeed para obter os recursos mais recentes (por exemplo, suporte GGUF) de inferência de baixo bit LLM em CPUs. Você também pode usar a versão 1.3 sem NeuralSpeed seguindo o documento
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 )
Você também pode carregar o modelo de formato GGUF do Huggingface, por enquanto só suportamos o formato 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 )
Você também pode carregar o modelo PyTorch do Modelscope
Nota : requer escopo de modelo
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 )
Você também pode carregar o modelo de baixo bit quantizado pelo algoritmo 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 )
Nota: Consulte o exemplo e o script para obter mais detalhes.
Abaixo está o código de exemplo para usar as APIs Langchain estendidas. Veja mais exemplos.
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 )
Você pode acessar os modelos validados, precisão e desempenho nos dados do Release ou no blog Medium.
VISÃO GERAL | |||||||
---|---|---|---|---|---|---|---|
NeuralChat | Velocidade Neural | ||||||
NEURALCHAT | |||||||
Chatbot em CPU Intel | Chatbot na GPU Intel | Chatbot em Gaudí | |||||
Chatbot no cliente | Mais cadernos | ||||||
VELOCIDADE NEURAL | |||||||
Velocidade Neural | Streaming LLM | Kernels de baixa precisão | Paralelismo tensorial | ||||
COMPRESSÃO LLM | |||||||
SmoothQuant (INT8) | Quantização somente por peso (INT4/FP4/NF4/INT8) | QLoRA na CPU | |||||
COMPRESSÃO GERAL | |||||||
Quantização | Poda | Destilação | Orquestração | ||||
Aumento de dados | Exportar | Métricas | Objetivos | ||||
Gasoduto | Comprimento Adaptável | Saída antecipada | |||||
TUTORIAIS E RESULTADOS | |||||||
Tutoriais | Lista LLM | Lista Geral de Modelos | Desempenho do modelo |
Ver lista completa de publicações
Excelentes projetos de código aberto: bitsandbytes, FastChat, fastRAG, ggml, gptq, llama.cpp, lm-evauation-harness, peft, trl, streamingllm e muitos outros.
Obrigado a todos os contribuidores.
Bem-vindo para levantar ideias interessantes sobre técnicas de compressão de modelos e desenvolvimento de chatbot baseado em LLM! Sinta-se à vontade para entrar em contato conosco e aguardamos nossas colaborações na Intel Extension for Transformers!