오늘은 음성비서 프로젝트에 gpt 모델을 곁들여보면 어떨까해서 KoGpt를 써보게 되었다.
설명은 다른 블로그들에 많으니, 단순하게 설치하는 과정만 나중에 보기위해 작성해보겠다.
0. KoGpt API 사용
사실 따로 프롬프트 튜닝등을 위한게 아니라면 API를 사용하는게 훠어어어얼씬 편하다.
# -*- coding: utf-8 -*-
from PyKakao import KoGPT
api = KoGPT(service_key = "자신의 REST API")
prompt = "의료 스타트업으로 구성된 원격의료산업협의회가 10월부터 열리는 국정감사 시기에 맞춰 국회와 정부에 비대면 진료법 근거 마련을 촉구하는 정책제안서를 제출한다. 코로나19 사태에 비대면 진료의 한시 허용으로 원격 진료, 의약품 배송 등 서비스가 속속 등장하는 가운데 제도화 논의를 서둘러야 한다는 목소리가 높아질 것으로 전망된다. 코리아스타트업포럼 산하 원격의료산업협의회는 '위드(with) 코로나' 방역 체계 전환을 염두에 두고 비대면 진료 제도화 촉구를 위한 공동 대응 작업을 추진하고 있다. 협의회는 닥터나우, 엠디스퀘어, SH바이오, 메디버디 등 의료 스타트업 13개사로 구성됐다. 협의회는 국정감사 시기를 겨냥해 국회와 주무 부처인 보건복지부에 비대면 진료의 법적 근거 마련을 촉구할 방침이다. 이를 위해 주요 의원실과 관련 의견을 교환하고 있다. 협의회는 궁극적으로 의료법과 약사법 개정이 필요하지만 의료법 테두리 안에서 시행령 개정 등으로도 비대면 진료 가능성과 대상·의료기관 등을 구체화할 수 있다는 복안이다. 복지부 장관령으로 비대면 진료 기간을 명시하는 방안 등을 통해 사업 리스크도 줄일 수 있다. 올해 안에 국내 방역체계 패러다임이 바뀔 것으로 예상되는 점도 비대면 진료 제도화의 필요성을 높이고 있다. 최근 코로나19 백신 접종이 속도를 내면서 방역 당국은 위드 코로나 방역체계 전환을 고려하고 있다. 인구 대비 백신 접종 완료율이 70%가 되는 오는 10월 말에는 전환 논의가 수면 위로 뜰 것으로 보인다.정책제안서를 제출하는 시기는 언제인가?:"
max_tokens = 64
# 결과 조회
result = api.generate(prompt, max_tokens, temperature=0.2, top_p=0.8)
print(result['generations'][0]['text'])
단순하게 저것만 IMPORT하고 사용하면 된다 ㅇㅅㅇ..
1. KoGpt Hugging Face , Github
허깅페이스, 깃헙 에 설명, 사용법들이 적혀있으나, 실제로 설치해보면서 알아보도록 하겠다.
2. 가상환경 생성, pytorch 설치, python 설치
요즘 이런 모델들 설치할 때 제일 거슬리는 버전, 호환성 맞추기이다.
다행히 몇번의 삽질 덕에 내 환경에는 적용했다..
우선 나는 python 3.9.0 / torch 1.9.1 / cuda 11.2 이다.
아래 코드들을 차례로 설치해보자.
conda install transformers
pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html
pip install accelerate==0.20.3
나는 우선 파이썬 3.9.0 환경이고 cuda 는 11.2로 이미 세팅되어있다. cuda 설치법 아래에 있으니 먼저 세팅하길 바란다.
https://changsroad.tistory.com/342
그리고, 이건 삽질하다가 알아낸건데, 우선 torchr가 1.9.0이상이어야 하며, accelerate도 최소 0.20.3 이상이어야한다.
따라서 cuda가 더 높은사람은 각자 torch를 설치하면되겠다. (위 코드버전은 내 환경에 맞춘것이다.)
->원래 cuda 11.2는 딱 호환되는게 없어서 cuda 11.0과 호환되는 1.7.1을 사용했는데, 1.9.1도 사용이 가능했다~~개꿀
3. 실전 !
사실 이건 이미 삽질 다하고 작성하는 거기 때문에 쉬워보이지만 실상은 엄청 고생했다.
우선 KoGpt에 두가지 모델이 있는데, 나는 gpu가 16기가 짜리?인가 사실 이런거 잘 모르겠다.
근데 작업관리자에서 16기가인것 같길래 ㅇㅅㅇ(3060ti) 아래 모델을 사용했다.
당연히 위에 모델이 성능이 좋지만, 무겁다.
암튼 아래 모델을 선택했다고 가정하고 실행 코드를 작성해보자.
모델에 따라 revision 부분이 달라진다.
import torch
from torch.fx import symbolic_trace
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained(
'kakaobrain/kogpt', revision='KoGPT6B-ryan1.5b-float16', # or float32 version: revision=KoGPT6B-ryan1.5b
bos_token='[BOS]', eos_token='[EOS]', unk_token='[UNK]', pad_token='[PAD]', mask_token='[MASK]'
)
model = AutoModelForCausalLM.from_pretrained(
'kakaobrain/kogpt', revision='KoGPT6B-ryan1.5b-float16', # or float32 version: revision=KoGPT6B-ryan1.5b
pad_token_id=tokenizer.eos_token_id,
torch_dtype="auto", low_cpu_mem_usage=True
).to(device='cuda', non_blocking=True)
_ = model.eval()
prompt = "지정된 서식에 따라 작성해야 합니다"
with torch.no_grad():
tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
gen_tokens = model.generate(tokens, do_sample=True, temperature=0.8, max_length=512)
generated = tokenizer.batch_decode(gen_tokens)[0]
print(generated)
이게 코드고 처음 실행할 때는 모델을 다운받는데, 시간이 좀 걸릴 것이다.
우선 결론적으로 난 위의 코드가 안돌아갔다. 무슨 gpu용량 부족 memory error가 뜨길래, 우리집 pc로는 안되는건가.. 했는데 여기저기 뒤지다가 딱 한개의 글을 발견해서 적용해봤더니!!!!!!!!! 기적처럼 됐다.
바로 중간에 torch_dtype="auto"라고 되어 있는 부분을 torch_dtype=torch.float16 으로 바꿨더니 갑자기 실행이 됐다.
메모리 에러가 아니었나?>>
암튼 이제 나는 실행이 됐으나, 원래 그냥 torch_dtype="auto" 해도 돌아가야한다고한다. (대부분의 사람들이 다 이렇게 함)
그냥 안되는 분 memory error가 뜨는 분만 나처럼 바꿔서 시도해보면 될 것 같다.
+) 중간에 low_cpu_mem_use를 True로 설정할 때만 accelerate가 필요하다고 한다. 이걸 True로하고 accelerate가 깔려있다면 극도로! cpu의 사용량을 낮추고 바로 gpu로 메모리를 올린다고 하네여~
4. 실전 2
위와 같이 모델도 골랐고, 오류도 해결했다면 이제 사용만 하면된다.
단 KoGpt는 내가 ChatGpt를 생각했다가 해서 그런지 뭔가 이상했다..
나와 대화하는? 것이 아니라 내가 주어진 형식으로 물어야만 그 틀안에서의 답변을 했다. 무슨말인지는 아래에서 설명한다.
1. 문장 분류
prompt='''상품 후기를 긍정 또는 부정으로 분류합니다.
가격대비좀 부족한게많은듯=부정
재구매 친구들이 좋은 향 난다고 해요=긍정
ㅠㅠ약간 후회가 됩니다..=부정
이전에 먹고 만족해서 재구매합니다=긍정
튼튼하고 잘 쓸수 있을 것 같습니다. 이 가격에 이 퀄리티면 훌륭하죠='''
이런식의 prompt를 입력할 때, 저기 마지막처럼 "훌륭하죠=" 로 끝내야, 저 튼튼하고~훌륭하죠가 긍정 부정인지를 대답한다. 그렇지 않으면 이상한 말을 내뱉는다. (실제 돌려보니, 긍정이라고 하고 뒤에는 또 이상한 단어들~)
2. 요약하기
요약은 prompt 끝에 "한줄 요약" 으로 끝나야만 요약된 문장으로 응답이 온다. 생각보다 요약은 잘하는데 뒤쪽부분에 막 이상한 단어를 내뿜기도 한다.
3. 질문 & 답변
4. 말투 변형
5. 영어 번역
6. 소설 이어쓰기
등등 다양한 기능이 있다고하니, 재밌게 놀아보길.
아래 KoGpt api 설명에 다양한 기능 예시가 적혀있다.
참고블로그
'프로젝트 > 음성비서' 카테고리의 다른 글
Voice secretary 버전 2.0.0 (0) | 2023.11.02 |
---|---|
KT GenieLabs api 이용하기 (0) | 2023.11.02 |
Voice secretary 버전 1.5.0 (0) | 2023.11.02 |
Voice secretary 버전 1.0.0 (0) | 2023.11.02 |
Open ai - Whisper 설치 (0) | 2023.10.26 |