Dev LLM

윈도우(Windows10-64bit) 환경에서 LLaMA(LLaMA-30b 4bit mode) 테스트하기<모델 로드까지>

asev 2023. 3. 17. 21:36

며칠 전 리눅스에서 LLaMA-7B를 테스트해보고 이제는 로컬에서도 거대인공지능을 다룰 수 있다는 것을 알았다.

 

 

현재는 RTX3090을 쓸 수 있는 상황인데, 놀랍게도 GPTQ를 이용하면 메인스트림급으로 사용하는 RTX1660부터 LLaMA를 사용할 수 있다는 것을 알게 되었다. GPTQ는 GPTQ: Accurate Post-training Compression for Generative Pretrained Transformers란 논문 제목을 가지는데, GPT모델을 2/3/4비트로 압축하여 경량화하는 기술이다. 서핑하다 찾은 블로그의 표를 보면 RTX3090에서 기본 모델은 LLaMa-7b를 겨우 돌리나, GPTQ를 활용하면 더 좋은 성능의 LLaMa-30b까지 가능하다고 합니다.

참조 https://blog.naver.com/carrier00/223042971354

 

Windows10-64bit에서 GPTQ를 활용한 LLaMa-30b(4bit mode) 테스트 과정을 정리합니다~

 

주요과정

1. 아나콘다 설치

2. 관련 종속프로그램 설치

3. 가상환경 구성

4. 파이토치, 쿠다환경구성

5. text-generation-webui 설치

6. GPTQ-for-LLaMa 설치

7. huggingface버전 model 다운로드

8. text-generation-webui 실행

 

 

세부과정

1. 아나콘다 설치 : 윈도우환경 Anaconda(아나콘다) 설치하기 같은 블로그를 참고하세요~

*설치 중 내 가상환경 환경변수 등록 체크하기, 안하심 아래 파이썬 실행 에러를 해결하면서 환경구성에 대해 좀 더 알게 되실 겁니다~

 

2. Visual Studio 2019 빌드 도구 다운로드 및 설치

최신 BuildTools 링크를 클릭하고 설치할 때, ++를 사용한 데스크탑 개발 환경을 선택

https://learn.microsoft.com/en-us/visualstudio/releases/2019/history#release-dates-and-build-numbers

 

Visual Studio 2019 build numbers and release dates

A list of released versions, build numbers, and release links for Visual Studio 2019.

learn.microsoft.com

 

(제일 아래 부분에 에러가 뜨는 데 위 옵션과 관련된 것일지 모르겠다)

 

3. 가상환경 구성

윈도우버튼 - 아나콘다 - 아나콘다 파워쉘(관리자 권한으로..maybe)

실행된 터미널에서 아나콘다를 활용해 가상환경을 만드는 명령은 $conda create -n (가상환경명) 이다. 뒤에 파이썬 버전을 붙이면 그 버전 파이썬이 설치된 가상환경이 만들어진다. 오픈소스로 움직이는 리눅스 생태계 특성상 딥러닝 환경을 구성할 때 다양한 에러가 생기는데 이것을 가상환경을 새로 만듦으로 깔끔히 해결할 수 있다.

 

$conda create -n llamaW python==3.10

파이썬 3.10을 설치한 가상환경생성

$conda activate llamaW

진입

 

$python

파이썬 버전확인, 파이썬 실행 안될시 아나콘다 환경변수 에러해결참고 https://coding-kindergarten.tistory.com/152   굿!!

 

 

$conda install cuda pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia/label/cuda-11.7.0

쿠다, 파이토치와 관련 라이브러리 설치하기

시간도 걸리고 굉장히 많은 것들이 설치되는 모습을 캡쳐하고 싶었으나 어느덧 끝나고 정리된 프롬프트만..

 

 

$python

파이썬 실행, 3.10버전 확인()

$import torch; print(torch.cuda.is_available())

파이토치를 불러와 쿠다를 사용할 수 있는지 물었고 True

$exit()

파이썬 종료

$pip install git

깃허브 레포지토리 다운을 위한 git 설치

 

$git clone https://github.com/oobabooga/text-generation-webui.git

깃을 이용해 text-generation-webui 다운 설치

$cd .\text-generation-webui\

 

$mkdir repositories

repositories란 디렉토리(폴더) 만듦

 

$cd .\repositories\

repositories 디렉토리로 이동

 

$git clone https://github.com/qwopqwop200/GPTQ-for-LLaMa.git

 

GitHub - qwopqwop200/GPTQ-for-LLaMa: 4 bits quantization of LLaMa using GPTQ

4 bits quantization of LLaMa using GPTQ. Contribute to qwopqwop200/GPTQ-for-LLaMa development by creating an account on GitHub.

github.com

$cd GPTQ-for-LLaMa

 

$pip install ninja

 

$python setup_cuda.py install

 

캡쳐하고 보니 아래에 에러가 떠있음. 워닝은 치명적인 문제가 아닌 경우가 많다는...

 

$cd ../..

 

$pip install -r requirements.txt

requirements.txt속 라이브러리 일괄 설치

 

$python download-model.py decapoda-research/llama-13b-hf

허깅페이스에서 llama-13b모델 다운(37.2기가바이트)

C드라이브 용량 부족으로 D로 옮겨 재도전 

 

$python download-model.py decapoda-research/llama-30b-hf

바로 이어서 llama-30b 모델도 다운

 

$python .\server.py --cai-chat --load-in-4bit --model llama-13b --no-stream

실행하니 에러를 뿜는다. 머지.. 중간에 가상환경을 다시 만들었는디~ 일단 30b모델 다운받고 이어 쓰겠다.

MS의 통합개발환경(IDE) 비주얼스튜디오에 대한 에러가 있는 것 같다.

<1차 작성이 여기까지,,, 30b모델 로드한 지금보니 쿠다툴킷, 쿠다라이브러리 설치 안해서 이럼>

 

 

 

 

 

 

 

 

 

 

 

 

파이토치 다시 설치

 

 

결국 새 환경 만듦

오픈소스는 역시 버전이 중요하다

토치2.0  쿠다 11.7    

관련 종속라이브러리 설치

$pip install gradio

$pip install markdown

$pip install transformers

$pip install accelerate

$pip install peft

 

(llama2) PS D:\Projects\text-generation-webui> python .\server.py --load-in-4bit
Warning: --load-in-4bit is deprecated and will be removed. Use --gptq-bits 4 instead.

Loading llama-30b-hf...
CUDA extension not installed.
Traceback (most recent call last):
  File "D:\Projects\text-generation-webui\server.py", line 236, in <module>
    shared.model, shared.tokenizer = load_model(shared.model_name)
  File "D:\Projects\text-generation-webui\modules\models.py", line 95, in load_model
    model = load_quantized(model_name)
  File "D:\Projects\text-generation-webui\modules\GPTQ_loader.py", line 55, in load_quantized
    model = load_quant(str(path_to_model), str(pt_path), shared.args.gptq_bits)
  File "D:\Projects\text-generation-webui\repositories\GPTQ-for-LLaMa\llama.py", line 220, in load_quant
    from transformers import LlamaConfig, LlamaForCausalLM
ImportError: cannot import name 'LlamaConfig' from 'transformers' (C:\ProgramData\Anaconda3\envs\llama2\lib\site-packages\transformers\__init__.py)

 

 

 

여기에서 파이토치 버전이 1.13.1 cpu버전으로 바뀐다

 

 

New ENV

pytorch버전을 1.13.1로 정하고 설치

빙고!! 

 

 

GPTQ 셋업 에러(아마 호환 버전에 따른) 후 없다는 라이브러리 설치

 

(llama) PS D:\Projects\text-generation-webui> python .\server.py --load-in-4bit
Warning: --load-in-4bit is deprecated and will be removed. Use --gptq-bits 4 instead.

Traceback (most recent call last):
  File "D:\Projects\text-generation-webui\server.py", line 13, in <module>
    import modules.chat as chat
  File "D:\Projects\text-generation-webui\modules\chat.py", line 15, in <module>
    from modules.text_generation import (encode, generate_reply,
  File "D:\Projects\text-generation-webui\modules\text_generation.py", line 14, in <module>
    from modules.models import local_rank
  File "D:\Projects\text-generation-webui\modules\models.py", line 11, in <module>
    from transformers import (AutoConfig, AutoModelForCausalLM, AutoTokenizer,
ImportError: cannot import name 'BitsAndBytesConfig' from 'transformers' (C:\ProgramData\Anaconda3\envs\llama\lib\site-packages\transformers\__init__.py)
(llama) PS D:\Projects\text-generation-webui>

 

 

pip install transformers==4.21.2 해결 안됨

 

 

구글링하다 허깅페이스서 트랜스포머 설치 

pip install git+https://github.com/huggingface/transformers

https://stackoverflow.com/questions/75563949/huggingface-transformers-cannot-import-bitsandbytesconfig-from-transformers

 

 

 

성공하는 줄 알았으나, 에러

힌트 획득!!

안녕@candowu, 이 문제를 제기해 주셔서 감사합니다. 이는 허브의 구성에서tokenizer  를 가리키기 때문에 발생합니다 . 그러나 라이브러리의 토크나이저는 .LLaMATokenizerLlamaTokenizer

이는 최종 PR이 병합되기 전에 구성 파일이 생성되었기 때문일 수 있습니다.

tokenizer_config.json의 LLaMATokenizer를 소문자 LlamaTokenizer 로 변경하면 매력처럼 작동합니다.

 

 

 

13b모델 성공

 

 

30b모델 로드

 

질문에 알맞는 답을 생성하려는데 에러가 난다. 다시금 생각하니 기본 중의 기본을 안했구나..

삽질은 일단 여기까지 하고~

여유가 생기면 쿠다 툴킷과 cuDNN 라이브러리를 설치하고 결과를 올리겠다. 모든 분 즐거운 개발하십시오!!

 

 

 

 

 

 

 

참고

https://gist.github.com/lxe/82eb87db25fdb75b92fa18a6d494ee3c