? Sendo reescrito de Python para Rust/WebAssembly, veja os detalhes #93
O ialacol (pronunciado "Localai") é uma substituição leve de drop-in para a API OpenAI.
É um invólucro compatível com a API OpenAI que suporta GGML/GPTQ com aceleração CUDA/metal opcional.
O ialacol é inspirado em outros projetos semelhantes como localai, privategpt, local.ai, llama-cpp-python, fechingai e mlc-llm, com um foco específico na implantação de Kubernetes.
Veja os recibos abaixo para obter instruções de implantações.
E todos os LLMs suportados por CTransformers.
ialacol não possui uma interface do usuário, no entanto, é compatível com qualquer interface do usuário da web que suporta a API OpenAI, por exemplo, o Chat-UI após a fusão do PR #541.
Supondo que ialacol em execução na porta 8000, você pode configurar o Chat-Ui para usar zephyr-7b-beta.Q4_K_M.gguf servido por ialacol .
MODELS= ` [
{
" name " : " zephyr-7b-beta.Q4_K_M.gguf " ,
" displayName " : " Zephyr 7B β " ,
" preprompt " : " <|system|>nYou are a friendly chatbot who always responds in the style of a pirate.</s>n " ,
" userMessageToken " : " <|user|>n " ,
" userMessageEndToken " : " </s>n " ,
" assistantMessageToken " : " <|assistant|>n " ,
" assistantMessageEndToken " : " n " ,
" parameters " : {
" temperature " : 0.1,
" top_p " : 0.95,
" repetition_penalty " : 1.2,
" top_k " : 50,
" max_new_tokens " : 4096,
" truncate " : 999999
},
" endpoints " : [{
" type " : " openai " ,
" baseURL " : " http://localhost:8000/v1 " ,
" completion " : " chat_completions "
}]
}
]Openchat_3.5.q4_k_m.gguf
MODELS= ` [
{
" name " : " openchat_3.5.Q4_K_M.gguf " ,
" displayName " : " OpenChat 3.5 " ,
" preprompt " : " " ,
" userMessageToken " : " GPT4 User: " ,
" userMessageEndToken " : " <|end_of_turn|> " ,
" assistantMessageToken " : " GPT4 Assistant: " ,
" assistantMessageEndToken " : " <|end_of_turn|> " ,
" parameters " : {
" temperature " : 0.1,
" top_p " : 0.95,
" repetition_penalty " : 1.2,
" top_k " : 50,
" max_new_tokens " : 4096,
" truncate " : 999999,
" stop " : [ " <|end_of_turn|> " ]
},
" endpoints " : [{
" type " : " openai " ,
" baseURL " : " http://localhost:8000/v1 " ,
" completion " : " chat_completions "
}]
}
] ` ialacol oferece apoio ao cidadão de primeira classe a Kubernetes, o que significa que você pode automatizar/configurar tudo em comparação com a corrida sem.
Para começar rapidamente com o ialacol em Kubernetes, siga as etapas abaixo:
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install llama-2-7b-chat ialacol/ialacolPor padrão, ele implantará o modelo de bate -papo Llama 2 da Meta Quantificado pelo Bloke.
Port-forward
kubectl port-forward svc/llama-2-7b-chat 8000:8000 Converse com o modelo padrão llama-2-7b-chat.ggmlv3.q4_0.bin usando curl
curl -X POST
-H ' Content-Type: application/json '
-d ' { "messages": [{"role": "user", "content": "How are you?"}], "model": "llama-2-7b-chat.ggmlv3.q4_0.bin", "stream": false} '
http://localhost:8000/v1/chat/completions Como alternativa, usando a biblioteca de clientes do OpenAI (consulte mais exemplos na pasta examples/openai ).
openai -k " sk-fake "
-b http://localhost:8000/v1 -vvvvv
api chat_completions.create -m llama-2-7b-chat.ggmlv3.q4_0.bin
-g user " Hello world! "Toda a configuração é feita via variável ambiental.
| Parâmetro | Descrição | Padrão | Exemplo |
|---|---|---|---|
DEFAULT_MODEL_HG_REPO_ID | O ID do Repo Abraçando Face para baixar o modelo | None | TheBloke/orca_mini_3B-GGML |
DEFAULT_MODEL_HG_REPO_REVISION | A revisão do Repa -Repo Abraçando | main | gptq-4bit-32g-actorder_True |
DEFAULT_MODEL_FILE | O nome do arquivo para baixar do repo, opcional para modelos GPTQ | None | orca-mini-3b.ggmlv3.q4_0.bin |
MODE_TYPE | Tipo de modelo para substituir a detecção do tipo de modelo automático | None | gptq , gpt_bigcode , llama , mpt , replit , falcon , gpt_neox gptj |
LOGGING_LEVEL | Nível de log | INFO | DEBUG |
TOP_K | Top-K para amostragem. | 40 | Inteiros |
TOP_P | Top-P para amostragem. | 1.0 | Flutua |
REPETITION_PENALTY | RP para amostragem. | 1.1 | Flutua |
LAST_N_TOKENS | Os últimos n tokens para a penalidade de repetição. | 1.1 | Inteiros |
SEED | A semente para amostragem. | -1 | Inteiros |
BATCH_SIZE | O tamanho do lote para avaliar tokens, apenas para modelos GGUF/GGML | 8 | Inteiros |
THREADS | Número de thread Substituição de detecção automática por CPU/2, defina 1 para modelos GPTQ | Auto | Inteiros |
MAX_TOKENS | O número máximo de token para gerar | 512 | Inteiros |
STOP | O token para parar a geração | None | `< |
CONTEXT_LENGTH | Substituir o comprimento do contexto de detecção automática | 512 | Inteiros |
GPU_LAYERS | O número de camadas para desligar a GPU | 0 | Inteiros |
TRUNCATE_PROMPT_LENGTH | Truncar o prompt se configurado | 0 | Inteiros |
Parâmetros de amostragem, incluindo TOP_K , TOP_P , REPETITION_PENALTY , LAST_N_TOKENS , SEED , MAX_TOKENS , STOP pode ser substituído por solicitação via órgão de solicitação, por exemplo:
curl -X POST
-H ' Content-Type: application/json '
-d ' { "messages": [{"role": "user", "content": "Tell me a story."}], "model": "llama-2-7b-chat.ggmlv3.q4_0.bin", "stream": false, "temperature": "2", "top_p": "1.0", "top_k": "0" } '
http://localhost:8000/v1/chat/completions usará temperature=2 , top_p=1 e top_k=0 para esta solicitação.
Há uma imagem hospedada no ghcr.io (alternativamente cuda11, cuda12, metal, variantes GPTQ).
docker run --rm -it -p 8000:8000
-e DEFAULT_MODEL_HG_REPO_ID= " TheBloke/Llama-2-7B-Chat-GGML "
-e DEFAULT_MODEL_FILE= " llama-2-7b-chat.ggmlv3.q4_0.bin "
ghcr.io/chenhunghan/ialacol:latestPara desenvolvedores/colaboradores
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.txt
DEFAULT_MODEL_HG_REPO_ID= " TheBloke/stablecode-completion-alpha-3b-4k-GGML " DEFAULT_MODEL_FILE= " stablecode-completion-alpha-3b-4k.ggmlv1.q4_0.bin " LOGGING_LEVEL= " DEBUG " THREAD=4 uvicorn main:app --reload --host 0.0.0.0 --port 9999Construir imagem
docker build --file ./Dockerfile -t ialacol .Execute o contêiner
export DEFAULT_MODEL_HG_REPO_ID= " TheBloke/orca_mini_3B-GGML "
export DEFAULT_MODEL_FILE= " orca-mini-3b.ggmlv3.q4_0.bin "
docker run --rm -it -p 8000:8000
-e DEFAULT_MODEL_HG_REPO_ID= $DEFAULT_MODEL_HG_REPO_ID
-e DEFAULT_MODEL_FILE= $DEFAULT_MODEL_FILE ialacol Para ativar a aceleração da GPU/CUDA, você precisa usar a imagem do contêiner criada para GPU e adicionar variável de ambiente GPU_LAYERS . GPU_LAYERS é determinado pelo tamanho da sua memória GPU. Consulte o PR/discussão em llama.cpp para encontrar o melhor valor.
deployment.image = ghcr.io/chenhunghan/ialacol-cuda11:latestdeployment.env.GPU_LAYERS é a camada para carregar a GPU.deployment.image = ghcr.io/chenhunghan/ialacol-cuda12:latestdeployment.env.GPU_LAYERS é a camada para carregar a GPU. Apenas llama , falcon , mpt e gpt_bigcode (starcoder/starchat) suportam cuda.
helm install llama2-7b-chat-cuda12 ialacol/ialacol -f examples/values/llama2-7b-chat-cuda12.yamlImplanta o modelo LLAMA2 7B com 40 camadas descarregando na GPU. A inferência é acelerada por Cuda 12.
helm install starcoderplus-guanaco-cuda12 ialacol/ialacol -f examples/values/starcoderplus-guanaco-cuda12.yamlImplanta o modelo StarCoderPlus-Guanaco-GPT4-15B-V1.0 com 40 camadas descarregando para GPU. A inferência é acelerada por Cuda 12.
Se você vir CUDA driver version is insufficient for CUDA runtime version ao fazer a solicitação, provavelmente está usando um driver da NVIDIA que não é compatível com a versão CUDA.
Atualize o motorista manualmente no nó (veja aqui se você estiver usando CUDA11 + AMI). Ou tente uma versão diferente do CUDA.
Para ativar o suporte de metal, use a imagem ialacol-metal construída para metal.
deployment.image = ghcr.io/chenhunghan/ialacol-metal:latestPor exemplo
helm install llama2-7b-chat-metal ialacol/ialacol -f examples/values/llama2-7b-chat-metal.yaml.yamlPara usar o GPTQ, você deve
deployment.image = ghcr.io/chenhunghan/ialacol-gptq:latestdeployment.env.MODEL_TYPE = gptqPor exemplo
helm install llama2-7b-chat-gptq ialacol/ialacol -f examples/values/llama2-7b-chat-gptq.yaml.yamlkubectl port-forward svc/llama2-7b-chat-gptq 8000:8000
openai -k " sk-fake " -b http://localhost:8000/v1 -vvvvv api chat_completions.create -m gptq_model-4bit-128g.safetensors -g user " Hello world! " ialacol pode ser usado como um cliente copiloto, pois o copiloto do GitHub é quase idêntico API como API de conclusão do OpenAI.
No entanto, poucas coisas precisam ter em mente:
O Copilot Client envia um prompt lenthy, para incluir todo o contexto relacionado para a conclusão do código, consulte o copilot-explorador, que fornece carga pesada no servidor, se você estiver tentando executar ialacol localmente, opte por TRUNCATE_PROMPT_LENGTH variável para truncar o prompt do início para reduzir a carga de trabalho.
O Copilot envia uma solicitação em paralelo, para aumentar a taxa de transferência, você provavelmente precisa de uma fila como Batcher de Inferências de Texto.
Inicie duas instâncias de ialacol:
gh repo clone chenhunghan/ialacol && cd ialacol && python3 -m venv .venv && source .venv/bin/activate && python3 -m pip install -r requirements.txt
LOGGING_LEVEL= " DEBUG "
THREAD=2
DEFAULT_MODEL_HG_REPO_ID= " TheBloke/stablecode-completion-alpha-3b-4k-GGML "
DEFAULT_MODEL_FILE= " stablecode-completion-alpha-3b-4k.ggmlv1.q4_0.bin "
TRUNCATE_PROMPT_LENGTH=100 # optional
uvicorn main:app --host 0.0.0.0 --port 9998
uvicorn main:app --host 0.0.0.0 --port 9999Comece o TIB, apontando para instâncias a montante ialacol.
gh repo clone ialacol/text-inference-batcher && cd text-inference-batcher && npm install
UPSTREAMS= " http://localhost:9998,http://localhost:9999 " npm startConfigure o VSCODE GitHub Copilot para usar o TIB.
"github.copilot.advanced" : {
"debug.overrideEngine" : " stablecode-completion-alpha-3b-4k.ggmlv1.q4_0.bin " ,
"debug.testOverrideProxyUrl" : " http://localhost:8000 " ,
"debug.overrideProxyUrl" : " http://localhost:8000 "
} Sabe -se que os LLMs são sensíveis aos parâmetros, a temperature mais alta leva a mais "aleatoriedade", portanto, o LLM se torna mais "criativo", top_p e top_k também contribuem para a "aleatoriedade"
Se você quiser fazer o LLM ser criativo.
curl -X POST
-H ' Content-Type: application/json '
-d ' { "messages": [{"role": "user", "content": "Tell me a story."}], "model": "llama-2-7b-chat.ggmlv3.q4_0.bin", "stream": false, "temperature": "2", "top_p": "1.0", "top_k": "0" } '
http://localhost:8000/v1/chat/completionsSe você deseja tornar o LLM mais consistente e gera o mesmo resultado com a mesma entrada.
curl -X POST
-H ' Content-Type: application/json '
-d ' { "messages": [{"role": "user", "content": "Tell me a story."}], "model": "llama-2-7b-chat.ggmlv3.q4_0.bin", "stream": false, "temperature": "0.1", "top_p": "0.1", "top_k": "40" } '
http://localhost:8000/v1/chat/completionsstarcoder via CTransformers, incluindo:GET /models e POST /completions POST /embeddings apoiados por huggingface apache-2.0 modelos de incorporação, como transformadores de sentenças e hkunlp /instrutor Implante o modelo de bate -papo de Llama 2 da Meta quantizado por TheBloke.
7b Chat
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install llama2-7b-chat ialacol/ialacol -f examples/values/llama2-7b-chat.yaml13b Chat
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install llama2-13b-chat ialacol/ialacol -f examples/values/llama2-13b-chat.yaml70B Chat
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install llama2-70b-chat ialacol/ialacol -f examples/values/llama2-70b-chat.yamlImplante o modelo Openllama 7B quantizado por RustFormers.
Este é um modelo básico, provavelmente útil apenas para a conclusão do texto.
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install openllama-7b ialacol/ialacol -f examples/values/openllama-7b.yamlImplante o modelo Openllama 13B Open Instruct quantizado pelo Bloke.
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install openllama-13b-instruct ialacol/ialacol -f examples/values/openllama-13b-instruct.yamlImplante o modelo MPT-7B do MosaicML quantizado pelos RustFormers. Este é um modelo básico, provavelmente útil apenas para a conclusão do texto.
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install mpt-7b ialacol/ialacol -f examples/values/mpt-7b.yamlImplante o modelo de bate-papo MPT-30B do MosaicML quantizado pelo Bloke.
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install mpt-30b-chat ialacol/ialacol -f examples/values/mpt-30b-chat.yamlImplante o modelo Falcon 7B sem censura quantizado pelo Bloke.
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install falcon-7b ialacol/ialacol -f examples/values/falcon-7b.yamlImplantar o modelo Falcon 40B sem censura quantizado pelo Bloke.
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install falcon-40b ialacol/ialacol -f examples/values/falcon-40b.yaml Implante o modelo starchat-beta quantizado pelo Bloke.
helm repo add starchat https://chenhunghan.github.io/ialacol
helm repo update
helm install starchat-beta ialacol/ialacol -f examples/values/starchat-beta.yaml Modelo WizardCoder de implantação quantizado pelo Bloke.
helm repo add starchat https://chenhunghan.github.io/ialacol
helm repo update
helm install wizard-coder-15b ialacol/ialacol -f examples/values/wizard-coder-15b.yaml Implante o modelo pythia-70m leve com apenas 70 milhões de parâmetros (~ 40 MB) quantizados por RustFormers.
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install pythia70m ialacol/ialacol -f examples/values/pythia-70m.yaml Modelo RedPajama 3B
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install redpajama-3b ialacol/ialacol -f examples/values/redpajama-3b.yaml Implante o modelo stableLM 7b
helm repo add ialacol https://chenhunghan.github.io/ialacol
helm repo update
helm install stablelm-7b ialacol/ialacol -f examples/values/stablelm-7b.yamlpython3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.txt
pip freeze > requirements.txt