C++로 작성된 GPT-J, LLaMA 및 MPT 모델을 위한 간단한 명령줄 채팅 프로그램입니다. llama.cpp를 기반으로 하며 완전한 호환성을 위해 gpt4all-backend를 사용합니다.
경고 아직 초기 단계이므로 버그가 있을 수 있습니다.
프로그램은 C++를 사용하여 만들어졌으므로 대부분의 Linux, MacOS 및 Windows 시스템에서 빌드하고 실행해야 합니다. 릴리스 링크에는 기성 바이너리가 있습니다. AVX2는 더 빠르며 대부분의 최신 컴퓨터에서 작동합니다. 프로그램을 실행하면 컴퓨터가 AVX2를 지원하는지 확인하고 인쇄합니다.
git clone --recurse-submodules https://github.com/kuvaus/LlamaGPTJ-chat
cd LlamaGPTJ-chat
모델 파일도 다운로드해야 합니다. 자세한 내용과 링크는 지원되는 모델을 참조하세요.
프로그램은 C++를 사용하여 만들어졌으므로 대부분의 Linux, MacOS 및 Windows 시스템에서 빌드하고 실행해야 합니다. 대부분의 시스템에서는 다음을 빌드하는 데만 필요합니다.
mkdir build
cd build
cmake ..
cmake --build . --parallel
메모
이전 프로세서가 있는 경우
-DAVX2=OFF
플래그를 사용하여 빌드 단계에서 AVX2 지침을 끌 수 있습니다.새 프로세서가 있는 경우
-DAVX512=ON
플래그를 사용하여 빌드 단계에서 AVX512 명령을 켤 수 있습니다.이전 macOS에서는
-DBUILD_UNIVERSAL=OFF
설정하여 범용 Intel/ARM64 바이너리 대신 x86 빌드만 만듭니다. 아주 오래된 macOS에서는-DOLD_MACOS=ON
설정하세요. 이렇게 하면/save
및/load
비활성화되지만 이전 Xcode에서는 컴파일됩니다.이제 Windows에서는 Visual Studio(MSVC) 또는 MinGW를 사용할 수 있습니다. 대신 MinGW 빌드를 원하면
-G "MinGW Makefiles"
설정하세요.ARM64 Linux에는 기성 바이너리가 없지만 이제 소스에서 빌드할 수 있습니다.
컴파일 후 바이너리는 다음 위치에 있습니다.
build/bin/chat
하지만 어디든 자유롭게 이동할 수 있습니다. 4개 스레드를 시작하는 간단한 명령:
./chat -m " /path/to/modelfile/ggml-vicuna-13b-1.1-q4_2.bin " -t 4
또는
./chat -m " /path/to/modelfile/ggml-gpt4all-j-v1.3-groovy.bin " -t 4
즐거운 채팅하세요!
현재 백엔드는 GPT-J, LLaMA 및 MPT 모델을 지원합니다.
먼저 GPT-J 모델을 다운로드해야 합니다. 모델에 대한 직접 링크는 다음과 같습니다.
- 기본 버전은 v1.0 입니다: ggml-gpt4all-j.bin
- 작성 당시 최신 버전은 1.3-groovy 입니다: ggml-gpt4all-j-v1.3-groovy.bin
각각 약 3.8GB입니다. 채팅 프로그램은 런타임 시 모델을 RAM에 저장하므로 실행하려면 충분한 메모리가 필요합니다. gpt4all.io 또는 nomic-ai/gpt4all github에서 GPT-J 모델에 대한 자세한 내용을 확인할 수 있습니다.
또는 먼저 LLaMA 모델을 다운로드해야 합니다. 원래 가중치는 연구 목적으로 사용되며 여기에서 액세스를 신청할 수 있습니다. 다음은 파생 모델에 대한 직접 링크입니다.
- 비쿠나 7b v1.1 : ggml-vicuna-7b-1.1-q4_2.bin
- 비쿠나 13b v1.1 : ggml-vicuna-13b-1.1-q4_2.bin
- GPT-4-모든 l13b-snoozy : ggml-gpt4all-l13b-snoozy.bin
LLaMA 모델은 상당히 큽니다. 7B 매개변수 버전은 각각 약 4.2Gb이고 13B 매개변수 버전은 8.2Gb입니다. 채팅 프로그램은 런타임 시 모델을 RAM에 저장하므로 실행하려면 충분한 메모리가 필요합니다. LLaMA 모델에 대한 자세한 내용은 백서나 META AI 웹사이트에서 확인할 수 있습니다.
대신 MPT 모델을 다운로드하여 사용할 수도 있습니다. MPT-7B 모델에 대한 직접 링크는 다음과 같습니다.
- 모자이크 ML로 사전 훈련된 MPT-7B 기본 모델: ggml-mpt-7b-base.bin
- 모자이크 ML로 훈련된 MPT-7B 지시 모델: ggml-mpt-7b-instruct.bin
- mosaic ML로 훈련된 비상업적 MPT-7B 채팅 모델: ggml-mpt-7b-chat.bin
각각 약 4.9GB입니다. 채팅 프로그램은 런타임 시 모델을 RAM에 저장하므로 실행하려면 충분한 메모리가 필요합니다. mosaicML 웹사이트나 mosaicml/llm-foundry github에서 MPT 모델에 대한 자세한 내용을 확인할 수 있습니다.
./chat -h
사용하여 도움말 및 전체 매개변수 목록을 볼 수 있습니다.
usage: ./bin/chat [options]
A simple chat program for GPT-J, LLaMA, and MPT models.
You can set specific initial prompt with the -p flag.
Runs default in interactive and continuous mode.
Type ' /reset ' to reset the chat context.
Type ' /save ' , ' /load ' to save network state into a binary file.
Type ' /save NAME ' , ' /load NAME ' to rename saves. Default: --save_name NAME.
Type ' /help ' to show this help dialog.
Type ' quit ' , ' exit ' or, ' Ctrl+C ' to quit.
options:
-h, --help show this help message and exit
-v, --version show version and license information
--run-once disable continuous mode
--no-interactive disable interactive mode altogether (uses given prompt only)
--no-animation disable chat animation
--no-saves disable ' /save ' , ' /load ' functionality
-s SEED, --seed SEED RNG seed for --random-prompt (default: -1)
-t N, --threads N number of threads to use during computation (default: 4)
-p PROMPT, --prompt PROMPT
prompt to start generation with (default: empty)
--random-prompt start with a randomized prompt.
-n N, --n_predict N number of tokens to predict (default: 200)
--top_k N top-k sampling (default: 40)
--top_p N top-p sampling (default: 0.9)
--temp N temperature (default: 0.9)
--n_ctx N number of tokens in context window (default: 0)
-b N, --batch_size N batch size for prompt processing (default: 20)
--repeat_penalty N repeat_penalty (default: 1.1)
--repeat_last_n N last n tokens to penalize (default: 64)
--context_erase N percent of context to erase (default: 0.8)
--b_token optional beginning wrap token for response (default: empty)
--e_token optional end wrap token for response (default: empty)
-j, --load_json FNAME
load options instead from json at FNAME (default: empty/no)
--load_template FNAME
load prompt template from a txt file at FNAME (default: empty/no)
--save_log FNAME
save chat log to a file at FNAME (default: empty/no)
--load_log FNAME
load chat log from a file at FNAME (default: empty/no)
--save_dir DIR
directory for saves (default: ./saves)
--save_name NAME
save/load model state binary at save_dir/NAME.bin (current: model_state)
context is saved to save_dir/NAME.ctx (current: model_state)
-m FNAME, --model FNAME
model path (current: ./models/ggml-vicuna-13b-1.1-q4_2.bin)
명령줄 옵션을 사용하여 이를 달성하는 방법에 대한 몇 가지 편리한 기능과 세부 정보는 다음과 같습니다.
기본적으로 프로그램은 채팅을 표준(stdout) 출력으로 인쇄하므로 앱에 프로그램을 포함하는 경우 stdout을 읽기만 하면 됩니다. --save_log
옵션을 사용하여 전체 채팅 로그를 텍스트 파일로 저장할 수도 있습니다. 새 세션을 시작할 때 --load_log
옵션을 사용하여 저장된 채팅 로그를 로드하기만 하면 과거 대화를 기억하는 기본적인 방법이 있습니다.
사용자 상호 작용 없이 프로그램을 한 번만 실행해야 하는 경우, 한 가지 방법은 -p "prompt"
로 프롬프트를 설정하고 --no-interactive
및 --no-animation
플래그를 사용하는 것입니다. 프로그램은 프롬프트를 읽고 답을 인쇄한 다음 닫힙니다.
AI에 개성을 부여하려면 prompt_template_sample.txt
변경하고 --load_template
사용하여 수정된 파일을 로드할 수 있습니다. 유일한 상수는 채팅 중 입력이 %1
라인에 배치된다는 것입니다. 지시, 프롬프트, 응답 등 모든 것을 원하는 방식으로 교체할 수 있습니다. 다른 personality_template.txt
파일을 갖는 것은 다른 AI 캐릭터를 추가하는 쉬운 방법입니다. 일부 모델의 경우 Prompt:
및 Response:
대신 AI와 사용자 이름을 모두 제공하면 AI가 두 사람 간의 대화를 모방하려고 시도하므로 대화 흐름을 더욱 자연스럽게 만들 수 있습니다.
채팅 중 언제든지 입력란에 /reset
입력하여 채팅을 재설정할 수 있습니다. 이렇게 하면 과거 대화, 로짓 및 토큰에 대한 AI의 기억이 지워집니다. 그러면 전체 모델을 다시 로드할 필요 없이 빈 상태에서 채팅을 시작할 수 있습니다.
--load_json "/path/to/file.json"
플래그를 사용하여 json 파일에서 매개변수를 가져올 수도 있습니다. 다양한 모델은 다양한 입력 매개변수를 사용하여 성능이 더 좋거나 나쁠 수 있으므로 json 파일을 사용하는 것은 모든 설정을 한 번에 저장하고 로드하는 편리한 방법입니다. JSON 파일 로더는 외부 종속성을 방지하기 위해 간단하게 설계되었으므로 JSON 파일은 특정 형식을 따라야 합니다. 다음은 간단한 예입니다.
{ "top_p" : 1.0 , "top_k" : 50400 , "temp" : 0.9 , "n_batch" : 9 }
이는 다양한 온도 및 샘플링 설정을 저장하려는 경우에 유용합니다.
그리고 더 자세한 내용은 다음과 같습니다.
{
"top_p" : 1.0 ,
"top_k" : 50400 ,
"temp" : 0.9 ,
"n_batch" : 20 ,
"threads" : 12 ,
"prompt" : "Once upon a time" ,
"load_template" : "/path/to/prompt_template_sample.txt" ,
"model" : "/path/to/ggml-gpt4all-j-v1.3-groovy.bin" ,
"no-interactive" : "true"
}
이는 json에서 프롬프트를 로드하고, 특정 템플릿을 사용하고, 비대화형 모드에서 프로그램을 한 번 실행하므로 사용자가 입력을 누를 필요가 없습니다.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.