Comecei a trabalhar na reimplementação da biblioteca aqui: FastTensors
Marque-o com uma estrela se quiser ver a implementação compatível com GGML em Go puro.
Por favor, confira meu projeto relacionado Booster
Sonhamos com um mundo onde colegas hackers de ML groquem modelos GPT REALMENTE GRANDES em seus homelabs sem que clusters de GPU consumam toneladas de $$$ .
O código do projeto é baseado no lendário framework ggml.cpp de Georgi Gerganov escrito em C++ com a mesma atitude em relação ao desempenho e elegância.
Esperamos que usar Golang em vez de uma linguagem tão poderosa , mas de nível muito baixo, permita uma adoção muito maior.
Primeiro, obtenha e converta os modelos originais do LLaMA por conta própria ou apenas baixe os prontos para o rock:
LLaMA-7B: lhama-7b-fp32.bin
LLaMA-13B: lhama-13b-fp32.bin
Ambos os modelos armazenam pesos FP32, então você precisará de pelo menos 32 Gb de RAM (não VRAM ou GPU RAM) para LLaMA-7B. Dobre para 64 Gb para LLaMA-13B.
Em seguida, crie o binário do aplicativo a partir das fontes (veja as instruções abaixo) ou apenas baixe um já criado:
Windows: lhama-go-v1.4.0.exe
MacOS: lhama-go-v1.4.0-macos
Linux: lhama-go-v1.4.0-linux
Agora que você tem o executável e o modelo, experimente você mesmo:
llama-go-v1.4.0-macos
--model ~ /models/llama-7b-fp32.bin
--prompt " Why Golang is so popular? "
--prompt Text prompt from user to feed the model input
--model Path and file name of converted .bin LLaMA model [ llama-7b-fp32.bin, etc ]
--server Start in Server Mode acting as REST API endpoint
--host Host to allow requests from in Server Mode [ localhost by default ]
--port Port listen to in Server Mode [ 8080 by default ]
--pods Maximum pods or units of parallel execution allowed in Server Mode [ 1 by default ]
--threads Adjust to the number of CPU cores you want to use [ all cores by default ]
--context Context size in tokens [ 1024 by default ]
--predict Number of tokens to predict [ 512 by default ]
--temp Model temperature hyper parameter [ 0.5 by default ]
--silent Hide welcome logo and other output [ shown by default ]
--chat Chat with user in interactive mode instead of compute over static prompt
--profile Profe CPU performance while running and store results to cpu.pprof file
--avx Enable x64 AVX2 optimizations for Intel and AMD machines
--neon Enable ARM NEON optimizations for Apple Macs and ARM server
LLaMA.go incorpora servidor HTTP independente expondo API REST. Para habilitá-lo, execute o aplicativo com sinalizadores especiais:
llama-go-v1.4.0-macos
--model ~ /models/llama-7b-fp32.bin
--server
--host 127.0.0.1
--port 8080
--pods 4
--threads 4
Dependendo do tamanho do modelo, quantos núcleos de CPU estão disponíveis, quantas solicitações você deseja processar em paralelo, quão rápido você gostaria de obter respostas, escolha os parâmetros de pods e threads com sabedoria.
Pods são várias instâncias de inferência que podem ser executadas em paralelo.
O parâmetro Threads define quantos núcleos serão usados para matemática de tensor em um pod.
Então, por exemplo, se você tiver uma máquina com 16 núcleos de hardware capaz de executar 32 hyper-threads em paralelo, poderá acabar com algo assim:
--server --pods 4 --threads 8
Quando não houver nenhum pod livre para lidar com a solicitação recebida, ele será colocado na fila de espera e iniciado quando algum pod terminar o trabalho.
Envie uma solicitação POST (com Postman) para o endereço do seu servidor com JSON contendo UUID v4 exclusivo e prompt:
{
"id" : " 5fb8ebd0-e0c9-4759-8f7d-35590f6c9fc3 " ,
"prompt" : " Why Golang is so popular? "
}
Envie uma solicitação GET (com Postman ou navegador) para um URL como http://host:port/jobs/status/:id
GET http://localhost:8080/jobs/status/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
Envie uma solicitação GET (com Postman ou navegador) para um URL como http://host:port/jobs/:id
GET http://localhost:8080/jobs/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
Primeiro, instale Golang e git (você precisará baixar instaladores no caso do Windows).
brew install git
brew install golang
Em seguida, clone o repositório e entre na pasta do projeto:
git clone https://github.com/gotzmann/llama.go.git
cd llama.go
Um pouco de mágica do Go para instalar dependências externas:
go mod tidy
go mod vendor
Agora estamos prontos para construir o binário a partir do código-fonte:
go build -o llama-go-v1.exe -ldflags " -s -w " main.go
1) Onde posso obter modelos originais do LLaMA?
Entre em contato diretamente com a Meta ou apenas procure algumas alternativas de torrent.
2) Como converter arquivos LLaMA originais em formato compatível?
Coloque os arquivos PyTorch FP16 originais no diretório de modelos e converta com o comando:
python3 ./scripts/convert.py ~ /models/LLaMA/7B/ 0