Я начал работать над повторной реализацией библиотеки здесь: FastTensors.
Пожалуйста, поставьте галочку, если хотите увидеть реализацию, совместимую с GGML, на чистом Go.
Пожалуйста, ознакомьтесь с моим связанным проектом Booster .
Мы мечтаем о мире, в котором коллеги-хакеры ML копают ДЕЙСТВИТЕЛЬНО БОЛЬШИЕ модели GPT в своих домашних лабораториях, не имея при этом кластеров графических процессоров, потребляющих чертовы тонны $$$ .
Код проекта основан на легендарном фреймворке ggml.cpp Георгия Герганова, написанном на C++ с таким же отношением к производительности и элегантности.
Мы надеемся, что использование Golang вместо столь мощного , но слишком низкоуровневого языка обеспечит гораздо большее распространение.
Сначала получите и конвертируйте оригинальные модели LLaMA самостоятельно или просто загрузите готовые:
LLaMA-7B: llama-7b-fp32.bin
LLaMA-13B: llama-13b-fp32.bin
Обе модели хранят веса FP32, поэтому для LLaMA-7B вам понадобится как минимум 32 ГБ ОЗУ (не видеопамяти или ОЗУ графического процессора). Удвойте до 64Гб для LLaMA-13B.
Затем соберите двоичный файл приложения из исходников (см. инструкции ниже) или просто загрузите уже созданный:
Windows: llama-go-v1.4.0.exe
MacOS: llama-go-v1.4.0-macos
Linux: llama-go-v1.4.0-linux
Итак, теперь у вас есть и исполняемый файл, и модель, попробуйте сами:
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 встроен автономный HTTP-сервер, предоставляющий REST API. Чтобы включить его, запустите приложение со специальными флагами:
llama-go-v1.4.0-macos
--model ~ /models/llama-7b-fp32.bin
--server
--host 127.0.0.1
--port 8080
--pods 4
--threads 4
В зависимости от размера модели, количества ядер ЦП, сколько запросов вы хотите обрабатывать параллельно, как быстро вы хотите получать ответы, разумно выбирайте параметры модулей и потоков .
Поды — это несколько экземпляров вывода, которые могут работать параллельно.
Параметр Threads определяет, сколько ядер будет использоваться для тензорных вычислений внутри модуля.
Например, если у вас есть машина с 16 аппаратными ядрами, способными параллельно запускать 32 гиперпотока, у вас может получиться что-то вроде этого:
--server --pods 4 --threads 8
Если нет свободного модуля для обработки поступающего запроса, он будет помещен в очередь ожидания и запущен, когда какой-либо модуль завершит работу.
Отправьте POST-запрос (с помощью Postman) на адрес вашего сервера с JSON, содержащим уникальный UUID v4, и предложите:
{
"id" : " 5fb8ebd0-e0c9-4759-8f7d-35590f6c9fc3 " ,
"prompt" : " Why Golang is so popular? "
}
Отправьте запрос GET (с помощью Postman или браузера) на URL-адрес, например http://host:port/jobs/status/:id.
GET http://localhost:8080/jobs/status/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
Отправьте запрос GET (с помощью Postman или браузера) по URL-адресу, например http://host:port/jobs/:id.
GET http://localhost:8080/jobs/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
Сначала установите Golang и git (в случае Windows вам потребуется скачать установщики).
brew install git
brew install golang
Затем клонируйте репо и войдите в папку проекта:
git clone https://github.com/gotzmann/llama.go.git
cd llama.go
Немного магии Go для установки внешних зависимостей:
go mod tidy
go mod vendor
Теперь мы готовы собрать двоичный файл из исходного кода:
go build -o llama-go-v1.exe -ldflags " -s -w " main.go
1) Где я могу получить оригинальные модели LLaMA?
Свяжитесь с Meta напрямую или просто найдите альтернативы торрентам.
2) Как конвертировать оригинальные файлы LLaMA в поддерживаемый формат?
Поместите исходные файлы PyTorch FP16 в каталог моделей , затем преобразуйте их с помощью команды:
python3 ./scripts/convert.py ~ /models/LLaMA/7B/ 0