Sobre
O Lambda-Instructor é uma implantação experimental do instrutor de modelo de embutido de texto na AWS Lambda.
O instrutor-Large é um modelo construído pelo Grupo PNL da Universidade de Hong Kong sob a licença Apache-2.0 e tem um bom desempenho em tarefas de recuperação (ou seja, encontrando documentos relacionados para uma determinada frase). Em junho de 2023, parece estar em um nível com o Text-ADA-002 da OpenAI em vários parâmetros de referência na tabela de líderes do Hugging Face.
Casos de uso potencial:
- Combine com inferência local: gerar um grande número de incorporações com o instrutor em grande parte na sua máquina local (vs. pagando por APIs comerciais como o OpenAI até para testes).
- Residência de dados: implante a função Lambda nas regiões globais da AWS, incluindo a Europa e os EUA.
- Escalabilidade: a AWS Lambda escala praticamente ilimitada, sem a sobrecarga do gerenciamento de servidores.
- Inferência de produção de baixo custo: com o preço por solicitação da AWS Lambda vs. executando um servidor 24/7.
- Use com bancos de dados vetoriais: como Chromadb ou Pinecone.
Desempenho, custo e limitações:
- Início frio: A função Lambda tem um começo frio de cerca de 150 segundos (com a base do instrutor cerca de 50 anos).
- Inferência: a solicitação consecutiva é processada em cerca de 6 segundos por solicitação (com a base do instrutor cerca de 3 segundos).
- Máx. Tokens: o instrutor Large parece estar limitado a um comprimento de sequência de 512 tokens (ca. 380 palavras), enquanto que o texto de OpenAI-Ada-002 suporta até 8191 tokens (ca. 6000 palavras).
- Custo: o custo da AWS Lambda pode ser estimado em:
- Configuração:
- Região: UE-Central-1 (Europa, Frankfurt)
- Preço do braço: US $ 0,0000133334 para cada segundo GB
- Solicitações: US $ 0,20 por 1 milhão de solicitações
- Tamanho da memória: 10240 MB
- Cálculo:
- Duração: $ 0,0000133334 * 10,24 GB * 6 segundos = 0,000819204096 / solicitação
- Solicitações: $ 0,20 / 1M Solicitações = 0,0000002 / solicitações
- Total = $ 0,0008194 / solicitação
- Em junho de 2023, isso é mais caro que o ADA V2 da OpenAI, a US $ 0,0001/1K tokens após a redução de preços de 75%.
Melhorias adicionais: o custo e o início do frio podem ser aprimorados com a AWS Lambda provisionada concorrência e os planos de economia de computação da AWS. Confira também a calculadora da AWS a 1M solicitações por mês para este projeto.
Implantação
Pré -requisitos
- O conhecimento geral da AWS é útil.
- Você precisa ter o Docker e o GIT-LFS instalados localmente.
- Você precisa instalar o AWS-SAM localmente e configurado com sua conta do AWS.
- Recomenda-se um ambiente local à base de ARM (MAC M1/M2). Se você tiver problemas, tente implantar através de uma máquina EC2 baseada em ARM (guia abaixo).
Configurar
Vamos baixar o modelo de instrutor localmente, embalar o aplicativo em um contêiner do docker e implantá-lo em uma função Lambda baseada em braço. Estamos usando o ARM, pois é mais baixo com a AWS e acabou sendo mais rápido.
- Clone o repositório
git clone https://github.com/maxsagt/lambda-instructor.git
- Clone o modelo Instructor-Large para a pasta .papp/model (consulte https://huggingface.co/hkunlp/instructor-large?clone=True)
git lfs install ./app/model
git clone https://huggingface.co/hkunlp/instructor-large ./app/model
- Construa o recipiente do docker com aws-sam
sam build --cached --parallel
- Teste localmente com a carga útil da amostra em event.json.
sam local invoke -e event.json
- Implantar para a AWS. Observe que suas necessidades de usuário ou função da AWS (temporárias) IAM permissões para a AWS CloudFormation, elástico Registry, S3, Lambda e IAM.
- Feito. Você encontrará uma função Lambda na AWS que está pronta para uma configuração adicional. Por exemplo:
- Teste a função Lambda no console Lambda.
- Configure um URL da função lambda para usar diretamente a função Lambda por meio de um URL.
- Adicione um gateway da API para funcionalidades mais avançadas da API.
Opcional: implante por meio de uma máquina EC2 baseada em ARM.
Se você não tiver uma máquina de braço em mãos ou deseja implantar na AWS para fazer o upload mais rápido do contêiner do docker.
- Crie uma instância da AWS:
- Testado no Ubuntu Server 22.04 LTS (HVM), Tipo de volume SSD, AMI-0329D3839379BFD15, Arquitetura: 64 bits (ARM), tipo de instância: T4G.Medium, armazenamento: 20GIB GP3.
- Verifique se o seu VPC é público.
- Inicie a instância.
- Clique na instância e adicione uma função do IAM por meio de ações -> Segurança. O papel do IAM precisa de IAM, S3, ECR, CloudFormation e Lambda Access.
- Carregue o repositório para a instância remota da AWS:
git clone https://github.com/maxsagt/lambda-instructor.git
cd lambda-instructor
zip -r deployment.zip . -x ' ./app/model/* '
PUBLIC_IPv4_DNS=ec2-x-xx-xxx-xxx.eu-central-1.compute.amazonaws.com
scp -o StrictHostKeyChecking=no -i " ../my_key.pem " ./deployment.zip ubuntu@ $PUBLIC_IPv4_DNS :deployment.zip
- Faça login na sua instância e execute o script de implantação de amostra.
ssh -o StrictHostKeyChecking=no -i " ../my_key.pem " ubuntu@ $PUBLIC_IPv4_DNS
sudo apt install unzip
unzip -o deployment.zip
chmod +x sample_deployment.sh
sudo bash -x sample_deployment.sh
- Construir e implantar conforme acima. Se o comando sam não for reconhecido, leia a documentação do SAM aqui.
- Não se esqueça de encerrar a instância após o uso.
Opinião
Feedback e contribuições são bem -vindos!