Comencé a trabajar en la reimplementación de la biblioteca aquí: FastTensors
Destaque si desea ver una implementación compatible con GGML en Go puro.
Por favor revisa mi proyecto relacionado Booster
Soñamos con un mundo en el que otros hackers de ML estén asimilando modelos GPT REALMENTE GRANDES en sus laboratorios domésticos sin que los clústeres de GPU consuman toneladas de $$$ .
El código del proyecto se basa en el legendario marco ggml.cpp de Georgi Gerganov escrito en C++ con la misma actitud hacia el rendimiento y la elegancia.
Esperamos que el uso de Golang en lugar de un lenguaje tan potente pero de nivel demasiado bajo permita una adopción mucho mayor.
Primero, obtenga y convierta los modelos originales de LLaMA por su cuenta, o simplemente descargue los listos para usar:
LLaMA-7B: llama-7b-fp32.bin
LLaMA-13B: llama-13b-fp32.bin
Ambos modelos almacenan pesos FP32, por lo que necesitarás al menos 32 Gb de RAM (no VRAM ni GPU RAM) para el LLaMA-7B. Doble a 64Gb para LLaMA-13B.
A continuación, cree el binario de la aplicación a partir de las fuentes (consulte las instrucciones a continuación) o simplemente descargue uno ya creado:
Windows: llama-go-v1.4.0.exe
MacOS: llama-go-v1.4.0-macos
Linux: llama-go-v1.4.0-linux
Ahora que tienes tanto el ejecutable como el modelo, pruébalo tú mismo:
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 un servidor HTTP independiente que expone la API REST. Para habilitarlo, ejecute la aplicación con indicadores especiales:
llama-go-v1.4.0-macos
--model ~ /models/llama-7b-fp32.bin
--server
--host 127.0.0.1
--port 8080
--pods 4
--threads 4
Dependiendo del tamaño del modelo, cuántos núcleos de CPU hay disponibles, cuántas solicitudes desea procesar en paralelo, qué tan rápido le gustaría obtener respuestas, elija sabiamente los parámetros de pods y subprocesos .
Los pods son una serie de instancias de inferencia que pueden ejecutarse en paralelo.
El parámetro Threads establece cuántos núcleos se utilizarán para las matemáticas de tensor dentro de un pod.
Entonces, por ejemplo, si tiene una máquina con 16 núcleos de hardware capaces de ejecutar 32 hiperprocesos en paralelo, podría terminar con algo como esto:
--server --pods 4 --threads 8
Cuando no hay ningún módulo libre para manejar la solicitud entrante, se colocará en la cola de espera y se iniciará cuando algún módulo finalice el trabajo.
Envíe la solicitud POST (con Postman) a la dirección de su servidor con JSON que contenga UUID v4 único y solicite:
{
"id" : " 5fb8ebd0-e0c9-4759-8f7d-35590f6c9fc3 " ,
"prompt" : " Why Golang is so popular? "
}
Envíe la solicitud GET (con Postman o navegador) a una URL como http://host:port/jobs/status/:id
GET http://localhost:8080/jobs/status/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
Envíe la solicitud GET (con Postman o navegador) a una URL como http://host:port/jobs/:id
GET http://localhost:8080/jobs/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
Primero, instale Golang y git (deberá descargar los instaladores en el caso de Windows).
brew install git
brew install golang
Luego clona el repositorio e ingresa a la carpeta del proyecto:
git clone https://github.com/gotzmann/llama.go.git
cd llama.go
Algo de magia para instalar dependencias externas:
go mod tidy
go mod vendor
Ahora estamos listos para construir el binario desde el código fuente:
go build -o llama-go-v1.exe -ldflags " -s -w " main.go
1) ¿Dónde puedo conseguir modelos originales de LLaMA?
Póngase en contacto con Meta directamente o simplemente busque algunas alternativas de torrents.
2) ¿Cómo convertir archivos LLaMA originales a formatos compatibles?
Coloque los archivos originales de PyTorch FP16 en el directorio de modelos y luego conviértalos con el comando:
python3 ./scripts/convert.py ~ /models/LLaMA/7B/ 0