1 of 26

20224224 추준호

알파카를 이용한 개인 AI챗봇

Final task for 인공지능과 추천시스템

2 of 26

1. 배경

Llama와 Alpaca는 모두 남아메리카의 낙타과 동물

Llama: 주로 화물 운반용으로, alpaca보다 체격이 더 큼

Alpaca: 털을 얻기 위한 목적으로 길들어진 동물

인공지능과 추천시스템

20224224 추준호

3 of 26

1. 배경

ChatGPT 열풍이 일어나자 메타에서 GPT3보다 모델 크기는 반도 안되지만 데이터를 4배 넘게 투입해서 더 좋은 성능을 보여주는 LLaMA 모델 만들어서 발표

인공지능과 추천시스템

20224224 추준호

4 of 26

1. 배경

스탠퍼드 대학 박사과정 학생들이 Meta의 LLaMA-7B 모델을 사용자의 명령어에 언어모델이 더 잘 답변할 수 있도록 finetuning한 Alpaca라는 모델을 공개

인공지능과 추천시스템

20224224 추준호

5 of 26

1. 배경

인공지능과 추천시스템

20224224 추준호

6 of 26

1. 배경

LoRA: Low-Rank Adaptation of Large Language Models

인공지능과 추천시스템

20224224 추준호

7 of 26

2. 알파카 LoRA 분석

A) finetune.py

  1. 사전 학습된 대형 기초 모델 로드��
  2. 모델의 tokenizer 로드��
  3. template에 트레이닝 data 입력 받을 준비��
  4. Huggingface의 PEFT*를 사용해 �LoRA 적응 모델 생성��
  5. 훈련 시작

B) generate.py

  1. 학습된 모델 및 weight 로드��
  2. template 기반으로 text generation 셋팅��
  3. 스트리밍/비스트리밍 옵션에 따른 생성 방법 정의��
  4. 서버 기동(using gradio)

* PEFT : 사전학습된 LLM의 대부분의 파라미터를 프리징하고 일부의 파라미터만을 파인튜닝함으로써 저장공간과 계산능력을 대폭 줄

인공지능과 추천시스템

20224224 추준호

8 of 26

3. 실제 History

1. 개인 노트북(Apple mac m1 silicon, 32GB)에서 수행하려고 하였으나, GPU 인식을 못하여 fine Tuning 불가 에러 발생

(서버를 기동하는 generate.py는 됨)

2. Google colab(무료버전)에서 T4 GPU로 fine tuning 수행했으나 예상 소요시간이 12시간 초과하게 됨.

인공지능과 추천시스템

20224224 추준호

9 of 26

3. 실제 History

3. Google colab pro 1달치 구매🥲

4. A100 GPU로 fine tuning 실행(대략 4시간 가까이 수행)

인공지능과 추천시스템

20224224 추준호

10 of 26

3. 실제 History

5. output을 google colab -> 개인 노트북으로 다운로드 & 서버 기동(서버 동작 시에도 GPU를 사용하기 때문에 colab은 무리)

- 서버 기동

인공지능과 추천시스템

20224224 추준호

11 of 26

3. 실제 History

5. output을 google colab -> 개인 노트북으로 다운로드 & 서버 기동(서버 동작 시에도 GPU를 사용하기 때문에 colab은 무리)

- 동작 DEMO

인공지능과 추천시스템

20224224 추준호

12 of 26

4. 비교

fine tuning 전/후 response 비교

Before (Alpaca original)

Instruction : 피보나치 수열(Fibonacci numbers)을 출력하는 파이썬 코드를 작성해주세요

After (instruction-trained)

인공지능과 추천시스템

20224224 추준호

13 of 26

5. 논의 : 더 깊은 fine tuning을 하고싶다면

- 동일한 데이터로 epoch를 1 -> 5 변경하여 수행 시 갑자기 이상해짐

fine tuning을 안할수록 결과가 좋다? 데이터가 이상한가?

인공지능과 추천시스템

20224224 추준호

14 of 26

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 추준호

15 of 26

5. 논의 : 더 깊은 fine tuning을 하고싶다면

- 알고보니 ko_alpaca_data.json 데이터는 짧은 시간에 다량의 데이터를 만들기 위해 다른 AI챗봇을 사용했음

인공지능과 추천시스템

20224224 추준호

16 of 26

5. 논의 : 더 깊은 fine tuning을 하고싶다면

- 알고는 있었지만 다시 한 번 깨닫게 된 데이터의 중요성

인공지능과 추천시스템

20224224 추준호

17 of 26

18 of 26

별첨 : 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 추준호

19 of 26

별첨 : 개인 노트북(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 추준호

20 of 26

별첨 : 웹화면에 보이는 파라미터 설명(=transformer 라이브러리)

인공지능과 추천시스템

20224224 추준호

21 of 26

별첨 : 웹화면에 보이는 파라미터 설명(=transformer 라이브러리)

Temperature

인공지능과 추천시스템

20224224 추준호

22 of 26

별첨 : 웹화면에 보이는 파라미터 설명(=transformer 라이브러리)

Top-p (nucleus) sampling

인공지능과 추천시스템

20224224 추준호

23 of 26

별첨 : 웹화면에 보이는 파라미터 설명(=transformer 라이브러리)

Top-k sampling

인공지능과 추천시스템

20224224 추준호

24 of 26

별첨 : 웹화면에 보이는 파라미터 설명(=transformer 라이브러리)

Beam search

인공지능과 추천시스템

20224224 추준호

25 of 26

별첨 : 웹화면에 보이는 파라미터 설명(=transformer 라이브러리)

max tokens

인공지능과 추천시스템

20224224 추준호

26 of 26

별첨 : 웹화면에 보이는 버튼 설명(=gradio 라이브러리)

생략^^

인공지능과 추천시스템

20224224 추준호