저는 여기서 라이브러리 재구현 작업을 시작했습니다: FastTensors
순수 Go에서 GGML 호환 구현을 보려면 별표를 표시하세요.
내 관련 프로젝트 Booster를 확인해 보세요.
우리는 동료 ML 해커들이 GPU 클러스터가 엄청난 양의 $$$ 을 소비하지 않고도 홈랩에서 정말 큰 GPT 모델을 탐색하는 세상을 꿈꿉니다.
이 프로젝트의 코드는 성능과 우아함에 대한 동일한 태도로 C++로 작성된 Georgi Gerganov의 전설적인 ggml.cpp 프레임워크를 기반으로 합니다.
강력 하지만 너무 낮은 수준의 언어 대신 Golang을 사용하면 훨씬 더 많은 채택이 가능해지기를 바랍니다.
먼저 원본 LLaMA 모델을 직접 구해 변환하거나 바로 사용할 수 있는 모델을 다운로드하세요.
LLaMA-7B: llama-7b-fp32.bin
LLaMA-13B: 라마-13b-fp32.bin
두 모델 모두 FP32 가중치를 저장하므로 LLaMA-7B에는 최소 32GB의 RAM(VRAM 또는 GPU RAM 아님)이 필요합니다. LLaMA-13B의 경우 64Gb로 두 배.
다음으로, 소스에서 앱 바이너리를 빌드하거나(아래 지침 참조) 이미 빌드된 것을 다운로드하세요.
윈도우: llama-go-v1.4.0.exe
MacOS: llama-go-v1.4.0-macos
리눅스: 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에는 REST API를 노출하는 독립형 HTTP 서버가 포함되어 있습니다. 활성화하려면 특수 플래그를 사용하여 앱을 실행하세요.
llama-go-v1.4.0-macos
--model ~ /models/llama-7b-fp32.bin
--server
--host 127.0.0.1
--port 8080
--pods 4
--threads 4
모델 크기, 사용 가능한 CPU 코어 수, 병렬로 처리하려는 요청 수, 답변을 얻는 속도에 따라 포드 및 스레드 매개변수를 현명하게 선택하세요.
포드는 병렬로 실행될 수 있는 다수의 추론 인스턴스입니다.
스레드 매개변수는 포드 내의 텐서 수학에 사용되는 코어 수를 설정합니다.
예를 들어 32개의 하이퍼 스레드를 병렬로 실행할 수 있는 16개의 하드웨어 코어가 있는 시스템이 있는 경우 다음과 같이 끝날 수 있습니다.
--server --pods 4 --threads 8
도착하는 요청을 처리할 수 있는 여유 포드가 없으면 대기 대기열에 배치되고 일부 포드가 작업이 완료되면 시작됩니다.
고유한 UUID v4 및 프롬프트가 포함된 JSON을 사용하여 서버 주소로 POST 요청(Postman 사용)을 보냅니다.
{
"id" : " 5fb8ebd0-e0c9-4759-8f7d-35590f6c9fc3 " ,
"prompt" : " Why Golang is so popular? "
}
http://host:port/jobs/status/:id와 같은 URL로 GET 요청(Postman 또는 브라우저 사용)을 보냅니다.
GET http://localhost:8080/jobs/status/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
http://host:port/jobs/:id와 같은 URL로 GET 요청(Postman 또는 브라우저 사용)을 보냅니다.
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