CPU로 연산시 query에 대한 답변을 받는데 거의 2분 가까이 시간이 소요되기 때문에 너무 느리다는 느낌이 있습니다. 그래서 GPU를 사용해서 PrivateGPT를 실행하는 방법에 대해 알아봅니다.
GGML V3 모델 파일을 다운받아서 models 폴더 안에 복사합니다.
링크: https://huggingface.co/TheBloke/Manticore-13B-GGML/resolve/main/Manticore-13B.ggmlv3.q8_0.bin
아래 커맨드로 CUDA toolkit 11.8 과 cuDNN 8.9.1 버전을 설치합니다.
conda install cuda -c nvidia/label/cuda-11.8.0
conda install cudnn -c nvidia/label/cudnn-8.9.1
설치 후 아래 커맨드로 확인 합니다.
nvcc -V
그 다음 아래 허깅페이스 링크로 들어가서 사용할 모델을 다운 받습니다. 저는 노트북 사양이 그리 높지 않아서 RTX 3060 6GB에 16GB RAM 환경에서 돌리기 위해 가장 작은 모델을 받았습니다.
링크: https://huggingface.co/TheBloke/Manticore-13B-GGML
저는 이걸 받았습니다. 링크: https://huggingface.co/TheBloke/Manticore-13B-GGML/resolve/main/Manticore-13B.ggmlv3.q2_K.bin
그 다음 아래 커맨들을 실행해서 llamacpp을 빌드합니다.
pip uninstall -y llama-cpp-python
set CMAKE_ARGS="-DLLAMA_CUBLAS=on"
set FORCE_CMAKE=1
pip install llama-cpp-python==0.1.71 --no-cache-dir
아래 코드를 privateGPT.py에 추가합니다.
n_gpu_layers = os.environ.get('N_GPU_LAYERS')
LlamaCpp 오브젝트 생성 부분 코드를 아래와같이 변경 해줍니다.
match model_type:
case "LlamaCpp":
# llm = LlamaCpp(model_path=model_path, n_ctx=model_n_ctx, n_batch=model_n_batch, callbacks=callbacks, verbose=False)
llm = LlamaCpp(model_path=model_path, n_ctx=model_n_ctx, callbacks=callbacks, verbose=False, n_gpu_layers=n_gpu_layers)
.env 파일을 아래와 같이 수정해줍니다.
PERSIST_DIRECTORY=db
MODEL_TYPE=LlamaCpp
MODEL_PATH=models\Manticore-13B.ggmlv3.q2_K.bin
EMBEDDINGS_MODEL_NAME=all-MiniLM-L6-v2
MODEL_N_CTX=1000
N_GPU_LAYERS=26
아래 커맨드로 privateGPT를 실행합니다.
python privateGPT.py
"using CUDA for GPU acceleration" 문구가 보여야 GPU 가속이 됩니다.
모델 파라미터 수 자체가 CPU에 돌리는 모델에비해서 훨씬 많은데도 불구하고 GPU 가속으로 질의 후 답변받는데 1분여가 걸리네요. 10~20초 내외면 기다려볼만 한데 1분은 여전히 너무 기네요...
하지만 로컬에서 나만의 ChatGPT를 이렇게 쉽게 만들 수 있다는건 흥미롭습니다.
---------- Update ------------
3Billion model로 하니 15.3초 걸리네요.
모델 다운로드 페이지 링크: https://huggingface.co/SlyEcho/open_llama_3b_ggml/tree/main
'Development > Python' 카테고리의 다른 글
[Python] Raspberry Pi에서 selenium 설치 방법 (585) | 2023.12.03 |
---|---|
[Raspberry Pi 4B] Anaconda(MiniForge3) 설치하기 (194) | 2023.12.02 |
나만의 사설 ChatGPT 구축 해주는 PrivateGPT 설치 방법 (2) | 2023.07.15 |
[Pandas] Dataframe의 각 셀에 대한 연산을 벡터화(Vectorization)로 빠르게 처리하기 (0) | 2023.06.16 |
[Python] 미니콘다(아나콘다) 가상환경 생성시 오류 CondaHTTPError: HTTP 000 CONNECTION FAILED for url (1) | 2023.02.19 |