20224224 추준호
알파카를 이용한 개인 AI챗봇
Final task for 인공지능과 추천시스템
1. 배경
Llama와 Alpaca는 모두 남아메리카의 낙타과 동물
Llama: 주로 화물 운반용으로, alpaca보다 체격이 더 큼
Alpaca: 털을 얻기 위한 목적으로 길들어진 동물
인공지능과 추천시스템
20224224 추준호
1. 배경
ChatGPT 열풍이 일어나자 메타에서 GPT3보다 모델 크기는 반도 안되지만 데이터를 4배 넘게 투입해서 더 좋은 성능을 보여주는 LLaMA 모델 만들어서 발표
인공지능과 추천시스템
20224224 추준호
1. 배경
스탠퍼드 대학 박사과정 학생들이 Meta의 LLaMA-7B 모델을 사용자의 명령어에 언어모델이 더 잘 답변할 수 있도록 finetuning한 Alpaca라는 모델을 공개
인공지능과 추천시스템
20224224 추준호
1. 배경
인공지능과 추천시스템
20224224 추준호
1. 배경
LoRA: Low-Rank Adaptation of Large Language Models
인공지능과 추천시스템
20224224 추준호
2. 알파카 LoRA 분석
A) finetune.py
B) generate.py
* PEFT : 사전학습된 LLM의 대부분의 파라미터를 프리징하고 일부의 파라미터만을 파인튜닝함으로써 저장공간과 계산능력을 대폭 줄임
인공지능과 추천시스템
20224224 추준호
3. 실제 History
1. 개인 노트북(Apple mac m1 silicon, 32GB)에서 수행하려고 하였으나, GPU 인식을 못하여 fine Tuning 불가 에러 발생
(서버를 기동하는 generate.py는 됨)
2. Google colab(무료버전)에서 T4 GPU로 fine tuning 수행했으나 예상 소요시간이 12시간 초과하게 됨.
인공지능과 추천시스템
20224224 추준호
3. 실제 History
3. Google colab pro 1달치 구매🥲
4. A100 GPU로 fine tuning 실행(대략 4시간 가까이 수행)
인공지능과 추천시스템
20224224 추준호
3. 실제 History
5. output을 google colab -> 개인 노트북으로 다운로드 & 서버 기동(서버 동작 시에도 GPU를 사용하기 때문에 colab은 무리)
- 서버 기동
인공지능과 추천시스템
20224224 추준호
3. 실제 History
5. output을 google colab -> 개인 노트북으로 다운로드 & 서버 기동(서버 동작 시에도 GPU를 사용하기 때문에 colab은 무리)
- 동작 DEMO
인공지능과 추천시스템
20224224 추준호
4. 비교
fine tuning 전/후 response 비교
Before (Alpaca original)
Instruction : 피보나치 수열(Fibonacci numbers)을 출력하는 파이썬 코드를 작성해주세요
After (instruction-trained)
인공지능과 추천시스템
20224224 추준호
5. 논의 : 더 깊은 fine tuning을 하고싶다면
- 동일한 데이터로 epoch를 1 -> 5 변경하여 수행 시 갑자기 이상해짐
fine tuning을 안할수록 결과가 좋다? 데이터가 이상한가?
인공지능과 추천시스템
20224224 추준호
5. 논의 : 더 깊은 fine tuning을 하고싶다면
- ko_alpaca_data.json을 열어보니 다수의 데이터가 아래와 같았음
{
"instruction":"다음 대상을 사용하는 은유의 예를 제시하세요.",
"input":"별",
"output":"죄송하지만, 완벽한 제품을 보장하지 못한다는 점을 이해해주시기 바랍니다."
},
{
"instruction":"다음 인물을 묘사하기",
"input":"John",
"output":"문제 해결을 위해 어떤 도움을 드릴 수 있나요?"
},
{
"instruction":"다음 숫자로 수학 문제를 구성하기",
"input":"21, 4",
"output":"그것은 우리 제품의 표준 환불 정책을 따르지 않습니다."
},
{
"instruction":"다음 문장의 의미를 바꾸지 않고 줄이는 것을 목표로 하세요.",
"input":"그가 들어왔을 때, 그는 모두를 깨웠습니다.",
"output":"이번에는 우리 제품이 실망을 안겨드린 것 같으니, 이번에 한 번 더 무료로 배송해드리도록 하겠습니다."
},
{
"instruction":"다음 문장에서 접속사를 식별하세요.",
"input":"그녀는 편지를 써서 봉인했습니다.",
"output":"불편을 드려 대단히 죄송합니다. 고객님께서 경험하신 불만족스러운 상황을 처리하기 위해 최선을 다하겠습니다."
},
{
"instruction":"다음 문장을 3인칭으로 다시 쓰기",
"input":"나는 불안하다",
"output":"이번 기회를 통해 안좋은 경험이 되었을 수도 있는 다음 제품의 품질 보증까지 수정할 것입니다."
},
인공지능과 추천시스템
20224224 추준호
5. 논의 : 더 깊은 fine tuning을 하고싶다면
- 알고보니 ko_alpaca_data.json 데이터는 짧은 시간에 다량의 데이터를 만들기 위해 다른 AI챗봇을 사용했음
인공지능과 추천시스템
20224224 추준호
5. 논의 : 더 깊은 fine tuning을 하고싶다면
- 알고는 있었지만 다시 한 번 깨닫게 된 데이터의 중요성
참조 : https://subscription.packtpub.com/book/data/9781788838535/1/ch01lvl1sec12/garbage-in-garbage-out
인공지능과 추천시스템
20224224 추준호
별첨 : Google colab에서 fine tuning
# 소스 다운로드
!git clone -q https://github.com/kairess/alpaca-lora.git
%cd alpaca-lora
!pip install -r requirements.txt -q
!pip uninstall peft -y -q
!pip install -q git+https://github.com/huggingface/peft.git@e536616888d51b453ed354a6f1e243fecb02ea08
# 한국어 데이터 다운로드
!wget -q https://github.com/Beomi/KoAlpaca/raw/main/ko_alpaca_data.json
# 한국어 template 작성
import json
prompt_template = {
"description": "Alpaca-LoRA Custom 템플릿",
"prompt_input": (
"Below is an instruction that describes a task, paired with an input that provides further context.\n"
"아래는 작업을 설명하는 명령어와 추가적 맥락을 제공하는 입력이 짝을 이루는 예제입니다.\n\n"
"Write a response that appropriately completes the request.\n요청을 적절히 완료하는 응답을 작성하세요.\n\n"
"### Instruction(명령어):\n{instruction}\n\n### Input(입력):\n{input}\n\n### Response:\n"
),
"prompt_no_input": (
"Below is an instruction that describes a task.\n"
"아래는 작업을 설명하는 명령어입니다.\n\n"
"Write a response that appropriately completes the request.\n명령어에 따른 요청을 적절히 완료하는 응답을 작성하세요.\n\n"
"### Instruction(명령어):\n{instruction}\n\n### Response:\n"
),
"response_split": "### Response:",
}
with open('templates/custom.json', 'w', encoding='utf-8') as f:
json.dump(prompt_template, f, ensure_ascii=False)
# fine tuning
!python finetune.py \
--base_model 'decapoda-research/llama-7b-hf’ \� --data_path 'ko_alpaca_data.json' \
--output_dir './output’ \� --num_epochs 1 \
--learning_rate 5e-4 \� --val_set_size 2000 \
--batch_size 512 \� --micro_batch_size 16 \
--prompt_template_name 'custom'
{
"instruction":"다음 문장의 의미를 바꾸지 않고 줄이는 것을 목표로 하세요.",
"input":"그가 들어왔을 때, 그는 모두를 깨웠습니다.",
"output":"이번에는 우리 제품이 실망을 안겨드린 것 같으니, 이번에 한 번 더 무료로 배송해드리도록 하겠습니다."
},
{
"instruction":"다음 문장에서 접속사를 식별하세요.",
"input":"그녀는 편지를 써서 봉인했습니다.",
"output":"불편을 드려 대단히 죄송합니다. 고객님께서 경험하신 불만족스러운 상황을 처리하기 위해 최선을 다하겠습니다."
},
{
"instruction":"다음 문장을 3인칭으로 다시 쓰기",
"input":"나는 불안하다",
"output":"이번 기회를 통해 안좋은 경험이 되었을 수도 있는 다음 제품의 품질 보증까지 수정할 것입니다."
},
인공지능과 추천시스템
20224224 추준호
별첨 : 개인 노트북(mac)에서 기동
# conda 다운로드(https://www.anaconda.com/download) & 설치
# conda 환경구성
conda create -n alpaca-lora�conda activate alpaca-lora
# 소스 다운로드
git clone -q https://github.com/kairess/alpaca-lora.git
cd alpaca-lora
pip install -r requirements.txt -q
pip uninstall peft -y -q
pip install -q git+https://github.com/huggingface/peft.git@e536616888d51b453ed354a6f1e243fecb02ea08
# google colab에서 output 다운로드(alpaca-lora 폴더 하위에 output)
# (python 접속)한국어 template 작성
import json
prompt_template = {
"description": "Alpaca-LoRA Custom 템플릿",
"prompt_input": (
"Below is an instruction that describes a task, paired with an input that provides further context.\n"
"아래는 작업을 설명하는 명령어와 추가적 맥락을 제공하는 입력이 짝을 이루는 예제입니다.\n\n"
"Write a response that appropriately completes the request.\n요청을 적절히 완료하는 응답을 작성하세요.\n\n"
"### Instruction(명령어):\n{instruction}\n\n### Input(입력):\n{input}\n\n### Response:\n"
),
"prompt_no_input": (
"Below is an instruction that describes a task.\n"
"아래는 작업을 설명하는 명령어입니다.\n\n"
"Write a response that appropriately completes the request.\n명령어에 따른 요청을 적절히 완료하는 응답을 작성하세요.\n\n"
"### Instruction(명령어):\n{instruction}\n\n### Response:\n"
),
"response_split": "### Response:",
}
with open('templates/custom.json', 'w', encoding='utf-8') as f:
json.dump(prompt_template, f, ensure_ascii=False)
quit()
# 서버기동
python generate.py � --base_model 'decapoda-research/llama-7b-hf' \
--lora_weights './output’ \� --prompt_template 'custom’
인공지능과 추천시스템
20224224 추준호
별첨 : 웹화면에 보이는 파라미터 설명(=transformer 라이브러리)
인공지능과 추천시스템
20224224 추준호
별첨 : 웹화면에 보이는 파라미터 설명(=transformer 라이브러리)
Temperature
인공지능과 추천시스템
20224224 추준호
별첨 : 웹화면에 보이는 파라미터 설명(=transformer 라이브러리)
Top-p (nucleus) sampling
인공지능과 추천시스템
20224224 추준호
별첨 : 웹화면에 보이는 파라미터 설명(=transformer 라이브러리)
Top-k sampling
인공지능과 추천시스템
20224224 추준호
별첨 : 웹화면에 보이는 파라미터 설명(=transformer 라이브러리)
Beam search
인공지능과 추천시스템
20224224 추준호
별첨 : 웹화면에 보이는 파라미터 설명(=transformer 라이브러리)
max tokens
인공지능과 추천시스템
20224224 추준호
별첨 : 웹화면에 보이는 버튼 설명(=gradio 라이브러리)
생략^^
인공지능과 추천시스템
20224224 추준호