쌩뉴비를 위한 글.

부족한 부분은 빙의 힘을 빌려 해결했으나 정확하지 않을 수 있음.

수정해야될 부분은 댓글로 알려주면 감사하겠음.




Text generation web UI란?

llama 및 로컬 LLM을 돌리기 위한 대중적인 프로그램이라고 보면 됩니다.

제작자의 이름을 따서 간편하게 우바부가라 불리기도 합니다.


먼저 설치가 다 끝났다는 가정 하에

우바부가의 화면에 대해 설명하겠습니다.


맨 처음 우바부가를 구동하게 되었다면

이런 화면이 보일 겁니다.


여기서 화면 왼쪽 상단을 보시면


이런 탭들이 모여있을 겁니다.

현재 있는 탭은 텍스트 제너레이션 탭으로

LLM과 직접 소통할 수 있는 공간입니다.


이제 바로 그 오른쪽 옆에 있는 Parameters를 눌러보시면


이런 탭이 나올 겁니다. 여기는 파라미터 탭입니다.

파라미터 탭에서는 구동하고 있는 LLM에 대한 각종 세부 설정을 할 수 있습니다.

자세한 설명은 있다가 하겠습니다.


자, 다시 상단 탭에서 오른쪽 옆에 있는 Training을 눌러보세요.

트레이닝 탭은 직접 모델을 파인 튜닝하여 Lora를 생성 혹은 모델을 세부적으로 개조할 수 있습니다.

그러나 llama 7B 모델 기준으로도 RTX3090 이상의 성능을 요구하니,

일반적으로 만질 상황이 거의 없습니다.


다음은 Interface mode입니다.

인터페이스 탭에서는 LLM의 모드를 바꾸거나

각종 명령을 추가할 수 있습니다.

각각의 명령에 대한 설명은 이 링크에 들어간 후

Ctrl + F를 누르고 Starting the web UI 를 그대로 복붙하면 찾을 수 있습니다.


기본적인 탭들에 대한 설명이 끝났습니다.

이제 자주 쓰일 탭들에 대한 세부 설명입니다.










인터페이스 & 캐릭터 탭

먼저 인터페이스 탭의 주요 기능 중 하나는 대화 모드를 변경할 수 있다는 겁니다.

대화 모드를 변경하기 위해서 default로 설정되있는 칸을 클릭하세요.


그럼 이렇게 대화 모드들이 나오는 걸 확인할 수 있습니다.

이제 각각의 모드에 대해 차례대로 설명하겠습니다.


default: 기본 모드입니다. 왼쪽엔 Input, 오른쪽엔 Output 화면이 따로 나옵니다.

notebook: default 모드의 화면에서 좀더 간략화된 버전입니다. Input과 Output이 한 화면에 있습니다.

chat: 대화 모드 Ui를 채팅 형식으로 바꿔줍니다. Chat GPT와 비슷한 UI로 바뀝니다.

cai_chat: character.ai란 사이트의 화면과 유사한 모드입니다. 카톡과 비슷한 UI로 바뀝니다.


모드들 중 원하는 모드를 선택하였다면

아래의 Apply and restart the interface를 눌러주세요.

누르면 우바부가의 재시작과 동시에 선택한 모드가 적용됩니다.



그리고 위의 설정 중, Chat, Cai_chat 모드를 선택하였다면

상단의 탭에 캐릭터 탭이 추가된 걸 확인할 수 있습니다.


cai_chat모드의 캐릭터 탭


그럼 이제 캐릭터 탭의 UI에 대해 하나씩 알아보겠습니다.

Context 페이지에서는 모델에게 각종 설정 및 성격을 부여할 수 있습니다.


예시) "You are my close friend Tom. You have a pleasant personality.(당신은 저의 친한 친구 Tom입니다. 당신은 유쾌한 성격입니다.)"

라는 콘텍스트를 넣어주고 Bot's name을 Tom으로 바꿔준다면,

모델은 유쾌한 친구 같은 말투로 답변하게 됩니다.


다음은 Character 페이지입니다.

여기서는 미리 만들어져있는 캐릭터를 고를 수 있습니다.

MODE를 변경할 때처럼 None 칸을 클릭하면


이렇게 변경할 수 있는 캐릭터들의 목록이 뜹니다.

저는 따로 설정해놓은게 없기 때문에 기본으로 들어있는 예시 캐릭터만 보입니다.


+ 캐릭터를 목록에 추가하는 방법은

C/user/(자신의 컴퓨터 이름)/text-generation-webui/characters

경로에 캐릭터 파일을 넣으면 됩니다.

캐릭터 파일과 동일한 이름의 사진 파일을 넣으면 캐릭터의 프로필 사진으로 동기화 됩니다.

캐릭터 파일의 확장자 이름은 .json입니다.



이제 캐릭터 페이지 아래의 4가지 페이지를 보겠습니다.

1. 챗 히스토리 페이지입니다.

여기서는 그동안 모델과 나눈 대화 기록을 업로드하거나 

자신의 대화 기록을 파일로 만들어서 컴퓨터에 다운로드할 수도 있습니다.

또한 남이 공유한 캐릭터의 대화 기록 파일이 있다면 적용할 수도 있습니다.



2. 업로드 캐릭터 페이지입니다.

왼쪽 페이지는 아까의 컨텍스트 페이지를 파일로 만든 캐릭터 파일을 업로드할 수 있습니다.

오른쪽 페이지에선 캐릭터의 프로필 사진을 업로드할 수 있습니다.


3. 자신의 프로필 사진을 업로드할 수 있는 페이지입니다.


4. 피그말리온 모델을 사용할 때, 커스텀 캐릭터를 사용하기 위한 페이지입니다.









파라미터 탭

이제 가장 복잡하지만 알고 보면 더 어려운

파라미터 탭에 대한 설명입니다.


아래의 링크는 파라미터 탭에 대한 설명의 원문 링크입니다.

->> 원문 링크



cai_chat모드의 파라미터 탭

지금까지의 진행과 같이 하나하나 살펴보겠습니다.


1. Chat parameters

max_new_tokens 

주어진 프롬프트 토큰 수는 무시한 채 생성할 최대 토큰 수를 의미합니다.

쉽게 말해 답변의 길이라고 보면 됩니다.


maximum prompt size in tokens

프롬포트에 사용할 최대 토큰 수입니다.

쉽게 말해 모델의 기억력입니다. 특별한 상황이 아닌 이상 최대로 두는 것이 좋습니다.



2. Custom generation parameters


자주 쓰는 파라미터 탭에서도 사용빈도가 높은 페이지입니다!

알아두면 좋은 것들이 많습니다.


temperature

텍스트 생성의 다양성을 조절하는 값입니다. 

값이 높을수록 창의성이 가미된 답변을 하지만 헛소리나 구라를 칠 가능성이 높아집니다.

반대로 값이 낮을수록 재미없고 딱딱한 답변을 하지만 모델이 더욱 정직해집니다.


top_p

텍스트 생성에 사용할 단어의 확률입니다.

0인 상태에서는 제한이 없고 0 이상의 값만큼의 확률에 해당하지 않는 단어는 제외합니다.

값이 낮을수록 예상치 못한 답변을, 높을수록 예상이 잘되는 답변을 합니다.


Ex) "안녕?" 이라고 채팅을 보냈을 때의 상황

top_p 0.7 = 적당한 답변일 확률 70% 이상의 답변만 해라

인공 지능의 예상 답변 목록: 1. 그래(50%) 2. 하이(60%) 3. 안녕!(90%) 4. 너 몇 살이냐(10%)

3. 안녕!(90%) 출력

= You: 안녕?  Bot: 안녕!


top_k

텍스트 생성에 사용할 단어의 개수입니다.

0인 상태에서는 제한이 없고 양수일 때는 그 수만큼의 텍스트 단어 후보들을 사용합니다.

top_k의 수치가 높을수록, 단어의 후보 개수가 많을수록 예상치 못한 답변이 나올 수 있습니다.


typical_p

top_p의 값이 0이상 일 경우 top_p의 값과 비례하여 답변이 쌓일수록 텍스트 생성의 확률을 조정합니다.

typical_p의 값이 0일 시엔 top_p의 값을 고정합니다.

쉽게 말해 답변의 맥락이 얼마나 일관성을 유지할지 결정합니다.

typical_p의 값이 낮을 시 한 의견에 대해 일관적으로 말합니다.

반대로 높을 시에는 답변이 조금 횡설수설해질 수 있으나 더 재미있는 답변을 할 수도 있습니다.


repetition_penalty

이 수치는 답변의 반복을 방지하기 위한 것입니다.

값이 1일 때는 아무런 억제를 하지 않고 1보다 높은 값일수록

언어 모델이 같은 말을 반복하지 않을 확률이 올라갑니다.


쉽게 말해 이 수치가 높을수록 언어 모델이 습관처럼 특정 단어를 자주 쓰는 걸 방지할 수 있습니다.

값이 높을수록 표현의 다양성을 올릴 수 있습니다.


encoder_repetition_penalty

encoder_repetiton_penalty는 프롬포트에 있는 단어들의 확률을 조정하는 값입니다.

값이 1일 때는 적용되지 않고 1보다 큰 값이면 프롬포트에 있는 단어들의 출현 확률을 낮춥니다.

이 기능은 언어 모델의 자율성이 프롬포트에 너무 의지해 대화의 자연스러움이 낮아지는 걸 방지할 수 있습니다.


no_repeat_ngram_size

ngram단위의 텍스트로 반복되는 구문들을 방지하는 값입니다.

0일 때는 적용되지 않고 양수일 때의 ngram 단위로 반복을 방지합니다.


repetition_penalty와 비슷한 역할이지만 다릅니다.

repetition_penalty는 단어들이 반복될 확률을 줄여주기만 하기 때문에 다시 반복될 수도 있습니다.

그러나 이건 텍스트 생성에서 나오는 특정 단어의 반복 자체를 차단합니다.


n gram이란, 답변에서 연속적으로 나오는 n개의 단어를 의미 합니다.

예를 들어, 이 값이 0이면 "나는 너를 사랑해, 나는 너를 사랑해, 나는 너를 사랑해" 같은 답변이 나올 수 있습니다.

이제 이 값이 1이면 답변 내에서 절대 같은 단어를 반복하지 않습니다.

"나는 너를 사랑해, 너도 날 사랑해, 난 역시 너가 좋아."

값이 높아질수록 답변의 어휘가 다양해질 수 있습니다.

그러나 반복되지 않는 말을 찾기 위해 아무 헛소리나 지껄일수도 있습니다.



min_length

텍스트 생성의 최소 토큰 수입니다.

쉽게 말해 답변의 최소 길이를 설정합니다. 값을 높일수록 언어 모델이 단답을 할 수 없습니다.

예를 들어, 이 값이 5라면 언어 모델은 반드시 5단어 이상의 답변을 하게 됩니다.



3. Seed와 추가적인 것들

Generation attempts

이 값은 답변의 생성을 시도할 최대 횟수를 설정하는 값입니다.

예를 들어 1로 설정되있을 시 생성한 답변을 바로 내보내고,

3으로 설정되었을 시에는 답변을 총 3번 생성하고 나머지 설정 값에 따라 최적화된 답변을 하나 골라서 답변합니다.

temperture가 높다면 창의적으로 생성된 3개의 답변 중에서도 가장 창의성이 높은 답변을,

temperture가 낮다면 신중하게 생성된 3개의 답변 중에서도 가장 신중한 답변을 선택해 말해줍니다.

한 마디로 '말하기 전에 생각하기' 횟수를 정해주는 겁니다.


이 값이 높을수록 답변의 퀄리티는 올라가지만 답변에 소요되는 시간이 기하급수적으로 증가합니다.


Seed

seed는 텍스트 생성에 사용되는 초기 난수값입니다.

이건 그냥 -1로 놔두면 됩니다.

특정 숫자의 seed는 하나의 답변에 특화되어 그 답변만을 아주 잘 하게 합니다.

그래서 seed가 쓰일 때는 대개 같은 모델 군의 파라미터 개수별 성능 차이를 확인하기 위해 사용됩니다.

이러한 특별 상황이 아니라면 seed는 -1로 놔둘 때,

내가 말한 것에 따라 계속 적응하며 자연스럽게 말하기 때문에 그냥 -1로 놔두면 됩니다.


Contrastive search

위의 custom generation parameters에서 penalty_alpha는 

답변의 창의성과 일관성을 담당하는 부분을 전체적으로 크게 조정하는 값입니다.

값이 낮을수록 일관성을 유지하고, 값이 높을수록 창의성을 높힙니다.


게임으로 치면 custom generation parameters는 그래픽 세부 설정들이고

penalty_alpha의 값은 그래픽 설정 매우 낮음, 낮음, 중간, 고급, 울트라 처럼 크게크게 조정하는 수치라고 보면 됩니다.


Beam search

num_beams

num_beams는 답변의 단어를 선택할 때의 후보군의 개수를 설정합니다.

텍스트를 생성할 때 항상 이 수치 값의 개수만큼 토큰을 유지하라고 강제로 맞춥니다.

앞서 말한 top_k와 유사한 기능을 합니다.

즉, 이 수치의 값이 클수록 답변의 퀄리티가 올라가지만 후보군의 개수를 계속 유지해야하기 때문에

vram을 크게 소모하니 적절히 조절하는게 좋습니다.


length_penalty

이 수치는 답변의 전체 길이를 조절할 수 있습니다.

값이 0일때는 답변의 길이에 아무 영향을 끼치지 않으며,

0보다 낮을 때는 답변의 길이가 길어지고 0보다 높으면 답변의 길이가 길어집니다.



마지막으로 분명 이 모든게 귀찮은 분들이 계실 겁니다.

그런 분들을 위해 간단한 4가지 프리셋을 만들어 놓았으니 한 번 따라 입력해보세요.


정밀함

사실적인 답변 및 간단한 답변에 적절합니다.

temperature: 0.7

repetition penalty: 1.17

top_k: 40

top_p: 0.1


창의성!

채팅과 스토리 작성에 특화됩니다.

temperature: 0.72

repetition penalty: 1.1

top_k: 0

top_p: 0.73


기본 웹 UI 모드 Sphinx

30B 및 65B에서 다양한 스토리와 색다른 채팅 경험을 선사합니다.

temperature: 1.99

repetition penalty: 1.15

top_k: 30

top_p: 0.18


예측불가

예측할 수 없는 스토리와 놀라운 상상력을 뽐냅니다.

temperature: 0.8

repetition penalty: 1.15

top_k: 100

top_p: 0.9





 Lora 적용법


사실 매우 간단하다. 그러나 어디에도 우바부가용 튜토리얼은 없었다.


lora 파일의 내용물


먼저 Lora 파일을 찾아서 다운로드한다.

Lora의 파일 형식은 다음과 같고 확장자 명은 대부분 .bin이다. (추후 .safetensor로 변경될 수도 있다)


Loras가 있는 파일 위치


다운받은 로라를 아래의 경로와 같이 넣어준다.

 C/user(사용자)/(자신의 컴퓨터 이름)/text-generation-webui/loras

그리고 다시 우바부가로 돌아와 파라미터 탭을 열어준다.



아래에 보면 Lora라고 써있는 페이지가 보일 것이다.



자, 이제 위의 경로에 정상적인 로라 파일을 넣었다면 None 칸을 클릭했을 때



이렇게 Lora 파일이 보일 것이다.

이제 Lora를 클릭하면 Lora 적용 끝.

참고로 로라 적용 시, 7B 8비트 기준으로도 10기가 이상의 브이 램을 먹는다.



✔ 이 구역은 내용 업데이트 및 추가가 있을 수 있습니다.(2023.04.02)