본문 바로가기
🤗허깅페이스(Hugging Face)/🤗트랜스포머(Transformer) 활용하기

🤗huggingface LLM 개발을 위한 아나콘다 환경 구성

by Majestyblue 2024. 7. 16.

며칠전에 안 사실인데 🤗bitsandbyte라는 허깅페이스 양자화에 필요한 라이브러리가 0.43 이후부터 윈도우를 공식! 지원한단다! 이거때문에 wsl2 설치하고 우분투 환경 구성한거 생각하면...

https://github.com/bitsandbytes-foundation/bitsandbytes/issues/1131

 

Catch-all issue for WINDOWS installation problems (post your feedback on BNB v0.43.0 Windows support here) · Issue #1131 · bit

Dear all, Since the current release we now have official support for Windows via pip install bitsandbytes>=0.43.0 Instead of opening multiple individual issues, please use this issue to give us fee...

github.com

 

 

그래서 윈도우 아나콘다 가상환경을 구축하기 위해 포스팅을 하게 되었다. 순서는 다음과 같다.

 

0. Pytorch에서 CUDA 지원 버전 확인하기

1. CUDA, cuddn 라이브러리 설치

2. 아나콘다 가상환경 구성

3. CUDA에 맞는 Pytorch 설치

4. 관련 🤗Transformers 라이브러리 설치

 

0. Pytorch에서 CUDA 지원 버전 확인하기

CUDA 지원 버전을 우선 확인해야 한다.

 

여기 보니 CUDA 12.4가 지원이 제대로 안되는 모습을 보인다. 사실 개발을 위해 CUDA 12.4 버전이 설치되어 있다. 이런... 따라서 기존 NVIDIA 관련 파일을 전부 지워야 한다. 아래 사이트를 참고했다. (이거 안지우고 CUDA만 지운 후 다른 버전 설치하면 100% 오류나더라고...) 그리고 재부팅하면 된다.

 

https://cho000023.tistory.com/74

 

[windows 10] tensorflow를 위한 graphic driver, cuda 10.0, cudnn 7.6.0 설치

tensorflow 공부를 위해 그래픽 드라이버, cuda, cudnn을 설치하려 합니다. nvidia 관련 프로그램 삭제 - cuda 설치(+ 그래픽 드라이버) - cudnn 설치 순으로 포스팅 하겠습니다. tensorflow version : 2.0 cuda version :

cho000023.tistory.com

 

최종적으로 CUDA는 12.1 버전, cuddn은 8.9.7 버전을 설치하였다.

 

 

2. 아나콘다 가상환경 설정

본인은 아나콘다보다 미니콘다(miniconda)를 선호한다. 더 가볍기 때문이다. 미니콘다 설치 방법은 인터넷에 널렸으므로 패스, 가상환경에 필요한 라이브러리를 설치하자

 

conda create -n myuGemma python=3.10

conda activate myGemma

pip install -U transformers → 4.42.4 버전임을 확인

pip install -U datasets → 2.20 버전임을 확인

pip install -U bitsandbytes → 0.43.1 버전임을 확인

pip install -U pelt==0.9.0 → 0.9.0 설치해야 에러가 안뜸.

pip install -U trl → 0.11.1 버전임을 확인

pip install -U accelerate → 0.32.1 버전임을 확인

 

마지막으로 pytorch.org 에서 Run this Command 복사 → 붙여넣기

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

 

와.. 용량이 2.4GB나 되네

 

설치 후 

pip install jupyter notebook

아래 블로그를 참고하여 원하는 위치로 시작 경로를 변경한다.

https://overit.tistory.com/entry/Python-Anaconda-Jupyter-Notebook-%EA%B8%B0%EB%B3%B8-%EA%B2%BD%EB%A1%9C-%EB%B3%80%EA%B2%BD

 

[Python] Anaconda - Jupyter Notebook 기본 경로 변경

변경 순서 1. JupyterNotebook의 환경설정 변경 2. 시작메뉴의 주피터 노트북 속성을 수정 3. 정리 1. JupyterNotebook의 환경설정 시작 1.1. Jupyter Notebook의 초기홈 화면 - 처음 주피터 노트북을 실행하게 되

overit.tistory.com

 

가상환경에서 jupyter notebook 을 실행한다.

 

 

3. 작동 테스트 확인

gemma 2b 한국어 파인튜닝 모델을 이용할 것이다. 현재 내가 구상한 작업에 가장 적합한 모델이라 생각한다.

라이브러리를 불러와본다.

import os
from tqdm.auto import tqdm
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline

 

별 문제 없었다. 이번엔 CUDA가 사용가능한지 확인해 보자.

torch.cuda.is_available()

 

True라고 출력된다. 이번엔 아래와 같이 GPU 상태를 확인해 보자.

!nvidia-smi

 

아래와 같이 출력된다.

Tue Jul 16 00:04:09 2024       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 531.14                 Driver Version: 531.14       CUDA Version: 12.1     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                      TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf            Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 3060       WDDM | 00000000:01:00.0  On |                  N/A |
|  0%   37C    P8               15W / 170W|  10927MiB / 12288MiB |      1%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A      1332    C+G   C:\Windows\explorer.exe                   N/A      |
|    0   N/A  N/A      1764    C+G   C:\Windows\System32\dwm.exe               N/A      |
|    0   N/A  N/A      4780    C+G   ...1.0_x64__8wekyb3d8bbwe\Video.UI.exe    N/A      |
|    0   N/A  N/A      8284    C+G   ....Search_cw5n1h2txyewy\SearchApp.exe    N/A      |
|    0   N/A  N/A      9164    C+G   ...crosoft\Edge\Application\msedge.exe    N/A      |
|    0   N/A  N/A     12332    C+G   ....Search_cw5n1h2txyewy\SearchApp.exe    N/A      |
|    0   N/A  N/A     13284    C+G   ...CBS_cw5n1h2txyewy\TextInputHost.exe    N/A      |
|    0   N/A  N/A     14168    C+G   ...es\OpenBoxLab\RaiDrive\RaiDrive.exe    N/A      |
|    0   N/A  N/A     17144    C+G   ...5n1h2txyewy\ShellExperienceHost.exe    N/A      |
|    0   N/A  N/A     18836    C+G   ...GeForce Experience\NVIDIA Share.exe    N/A      |
|    0   N/A  N/A     28692      C   E:\miniconda3\envs\myGemma\python.exe     N/A      |
|    0   N/A  N/A     28844    C+G   ...siveControlPanel\SystemSettings.exe    N/A      |
|    0   N/A  N/A     35200    C+G   ...m Files\Mozilla Firefox\firefox.exe    N/A      |
|    0   N/A  N/A     36280    C+G   ...m Files\Mozilla Firefox\firefox.exe    N/A      |
+---------------------------------------------------------------------------------------+

 

 

모델, 토크나이저를 로드한다.

model_path = 'lemon-mint/gemma-ko-2b-instruct-v0.51'
model = AutoModelForCausalLM.from_pretrained(model_path, device_map='cuda')
tokenizer = AutoTokenizer.from_pretrained(model_path, add_special_tokens=True)

 

텍스트를 토크나이저에 입력하여 토큰이 텐서로 잘 변횐되었는지 확인한다.

input_text = "현재 대한민국은"
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
print(input_ids)
{'input_ids': tensor([[     2, 238513, 238360, 216101, 237522, 236648]], device='cuda:0'), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1]], device='cuda:0')}

 

모델에 토큰화된 텐서를 입력하고 출력을 확인해 보자.

output = model.generate(**input_ids)
print(output)
print(tokenizer.decode(output[0]))
tensor([[     2, 238513, 238360, 216101, 237522, 236648, 235248, 235274, 235315,
         235310, 235321, 237029, 235248, 235321, 237699, 235248, 235274, 235308,
         236666, 216101]], device='cuda:0')
<bos>현재 대한민국은 1948년 8월 15일 대한민

 

굳. 일단 환경이 잘 구성된 것 같다.