며칠전에 안 사실인데 🤗bitsandbyte라는 허깅페이스 양자화에 필요한 라이브러리가 0.43 이후부터 윈도우를 공식! 지원한단다! 이거때문에 wsl2 설치하고 우분투 환경 구성한거 생각하면...
https://github.com/bitsandbytes-foundation/bitsandbytes/issues/1131
그래서 윈도우 아나콘다 가상환경을 구축하기 위해 포스팅을 하게 되었다. 순서는 다음과 같다.
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
최종적으로 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
아래 블로그를 참고하여 원하는 위치로 시작 경로를 변경한다.
가상환경에서 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일 대한민
굳. 일단 환경이 잘 구성된 것 같다.
'🤗허깅페이스(Hugging Face) > 🤗트랜스포머(Transformer) 활용하기' 카테고리의 다른 글
gemma-2-2b-it 파인튜닝하기 (0) | 2024.10.11 |
---|---|
recurrent gemma 2b 훈련을 위한 데이터 준비 및 처리하기 (0) | 2024.10.03 |
Recurrent Gemma 2b와 프롬프트로 심리상담 챗봇 만들기 (0) | 2024.10.02 |
🤗huggingface에서 Recurrent Gemma 2b 사용해보기 (0) | 2024.07.22 |
🤗 [시작하기] 1. 허깅페이스 트랜스포머 라이브러리란? (0) | 2023.08.25 |