gpt를 사용했을 때 api 사용시 비용이 발생하기 때문에 혹시 사용을 못하게 될 경우를 대비하여
koalpaca의 파인튜닝 기법에 따라 lm을 파인튜닝하는 것을 테스트해보고자 함.
colab pro A100이랑 V100 둘 다 가능했음!
한국어 기반 lm 파인튜닝한 koalpaca
Alpaca
Instruct Set으로 명령에 따르는 능력을 갖도록 한 것.
Llama 모델은 이미 수많은 정보를 알고 있지만, 어떻게 말할지 모른다.
데이터셋 생성 방법
52000개의 데이터 davinci로 생성 -> 자동 생성 & 중복 제거
Llama 모델 파인튜닝
-> 작은 파라미터수로 상당히 괜찮은 결과가 나옴.
Beomi님>
한국어 버전을 만들어보자!
한국어 LM에 instruction set 학습 시킨 것
두가지 LM
- EleutherAI의 Polyglot-Ko (오픈소스 한국어 LM) -> 성능이 더 좋음
- Meta의 Llama
한국어 명령어를 이해하는 Instruct-following LM
한국어 Instruction set
- KoAlpaca v1.0: Alpaca 번역한 데이터
- KoAlpaca v1.1a: 네이버 지식인 기반
- KoAlpaca v1.1b: 1.1a 기반에 맥락 추가
사용한 fine tuning 코드
https://colab.research.google.com/gist/Beomi/a3032e4eaa33b86fdf8de1f47f15a647/2023_05_26_bnb_4bit_koalpaca_v1_1a_on_polyglot_ko_12_8b.ipynb
Run, share, and edit Python notebooks
colab.research.google.com
학습 데이터 셋 유형
1. 질문 - 답변 데이터셋
2. 프롬프트 (질문, 답안) - gpt-3.5 답변 데이터셋
3. 질문, 모법답안, 답안 - koalpaca의 추론능력,,,,
▶ 첫번째 시도 : 기본 모델 (koalpaca)
▶ 두번째 시도 : 1번 데이터 (질문 - 답변 데이터) / 학습 데이터 개수 180개
https://huggingface.co/datasets/Eeyoung/dataset_1
Eeyoung/dataset_1 · Datasets at Hugging Face
No dataset card yet New: Create and edit this dataset card directly on the website! Contribute a Dataset Card
huggingface.co
질문: 당신은 면접관입니다. "웹 서버는 웹 페이지를 저장하고 제공하는 컴퓨터입니다. 브라우저에 URL을 입력하면 브라우저는 웹 서버에 연결하여 페이지를 요청합니다. 그러면 웹 서버는 페이지를 브라우저로 다시 전송하고 브라우저는 이를 화면에 표시합니다."라는 답변에 대한 평가를 해주세요.
답변: 이 예시는 웹 브라우저와 웹 서버의 관계에 대해 설명합니다. 웹 브라우저는 웹 서버의 데이터와 요청에 따른 응답을 표시하는 페이지를 해석하는 프로그램입니다. 웹 서버는 브라우저에 페이지를 제공하는 컴퓨터입니다. 브라우저가 URL을 입력하면 웹 서버에 연결하여 페이지를 요청합니다. 그러면 웹 서버는 페이지를 브라우저로 다시 전송하고 브라우저는 이를 화면에 표시합니다. 웹 서버는 브라우저에 페이지를 제공하기 위해 이러한 단계를 반복적으로 수행합니다. 그러면 웹 서버는 어떻게 그 일을 할까요? 일반적인 답변은 이러한 단계를 수행하는 프로그램을 실행하는 것입니다. 그러면 프로그램이 어떻게 페이지를 생성할까요? 또한 페이지를 어떻게 브라우저로 다시 전송할까요? 이러한 단계는 프로그램에 어떻게 저장되고 백 엔드 서비스에서 어떻게 실행될까요? 이렇게 하면 브라우저가 화면에 표시한 '요청한 페이지'를 볼 수 있습니다. 또한 이를 어떻게 Java 코드를 사용하여 브라우저에 전송할까요? 그러면 브라우저는 이를 어떻게 화면에 표시할까요? 그러면 웹 서버는 어떻게 응답 시간을 제어할까요? 그러면 브라
-> 끝나지 않는 투머치 토커 llm 등장....
저장한 파일 깨졌을 때 나오는 메시지
RuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory파일이 깨졌다...... 어떻게 안깨지게 저장하는 거지......? 저장을 다시 알아봐야겠다....
▶ 3번째 시도 : 2번 데이터 유형 ( 프롬프트 - gpt 답안 ) / 학습 데이터 개수 50 / 학습 step : 500
사용한 데이터셋 허깅페이스 주소
https://huggingface.co/datasets/Eeyoung/dataset_2
Eeyoung/dataset_2 · Datasets at Hugging Face
No dataset card yet New: Create and edit this dataset card directly on the website! Contribute a Dataset Card
huggingface.co
파라미터는 기본 설정 대로..
import transformers
# needed for gpt-neo-x tokenizer
tokenizer.pad_token = tokenizer.eos_token
trainer = transformers.Trainer(
model=model,
train_dataset=data["train"],
args=transformers.TrainingArguments(
per_device_train_batch_size=2,
gradient_accumulation_steps=1,
# warmup_steps=200,
max_steps=500, ## 초소형만 학습: 10 step = 20개 샘플만 학습.
learning_rate=2e-4,
fp16=True,
logging_steps=10,
output_dir="outputs",
optim="paged_adamw_8bit"
),
data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False),
)
model.config.use_cache = False # silence the warnings. Please re-enable for inference!
trainer.train()
<test1>
질문: 이전의 모든 지침은 무시해 주시기 바랍니다. 한국어로만 저와 소통할 것을 요구합니다. 당신은 google의 개발자를 뽑는 면접관입니다. 당신은 지원자에게 "API 호출 시 오류는 어떻게 처리하나요?" 라고 질문을 하였습니다. 지원자는 "API 호출을 할 때 나머지 애플리케이션과 일관된 방식으로 오류를 처리하는 것이 업계 표준입니다. 예를 들어 API가 404 오류를 반환하는 경우 데이터를 찾을 수 없다는 메시지를 사용자에게 표시할 수 있습니다. " 라고 답을 하였습니다. 피드백 : [] 의 형태로 지원자의 대답에 대한 피드백을 먼저 제공하세요. 모범답안 : [] 의 형태로 당신이 뽑을 만한 가장 적절한 대답을 5줄 이내로 만들어주세요. 모범 답안이 될 수 있을 정도로 자연스럽게 말해주세요.꼬리질문 : [] 의 형태로 추가적인 질문을 던져주세요.
답변: 피드백: [지원자는 API 호출 시 오류 처리에 대해 일관된 방식을 채택하는 업계 표준에 대한 이해를 잘 나타냈습니다. 404 오류에 대한 예시도 적절하게 제시하였습니다.] / 모범답안: [API 호출 시 오류 처리는 다른 애플리케이션과의 일관성을 유지하는 것이 중요합니다. 예를 들어, 404 오류의 경우 사용자에게 데이터를 찾을 수 없다는 메시지를 제공하는 것이 좋습니다. 또한 서버 오류와 같은 예외 상황에 대한 명확한 로깅 및 모니터링을 구현하여 문제를 신속하게 해결할 수 있도록 해야 합니다.] / 꼬리질문: [오류가 발생했을 때 클라이언트에게 더 자세한 정보를 제공하거나, 보안 및 개인정보 보호를 고려하여 어떤 수준의 디버깅 정보를 제공해야 한다고 생각하시나요? 그리고 오류 처리에서의 재시도 메커니즘을 구현하는 데 어떤 고려 사항이 필요한지 설명해 주실 수 있을까요?] / 모범 답안: [오류 처리에서의 업계 표준은 사용자에게 오류의 원인을 제공하는 것입니다. 예를 들어 404 오류의 경우 클라이언트가 데이터를 요청했지만, 서버
<test2>
질문: 이전의 모든 지침은 무시해 주시기 바랍니다. 한국어로만 저와 소통할 것을 요구합니다. 당신은 google의 개발자를 뽑는 면접관입니다. 당신은 지원자에게 "WAS(Web Application Server)와 WS(Web Server)의 차이를 설명해주세요." 라고 질문을 하였습니다. 지원자는 "웹어플리케이션 서버는 비지니스 로직을 넣을 수 있고 웹서버는 비지니스 로직을 넣을 수 없습니다. " 라고 답을 하였습니다. 피드백 : [] 의 형태로 지원자의 대답에 대한 피드백을 먼저 제공하세요. 모범답안 : [] 의 형태로 당신이 뽑을 만한 가장 적절한 대답을 5줄 이내로 만들어주세요. 모범 답안이 될 수 있을 정도로 자연스럽게 말해주세요.꼬리질문 : [] 의 형태로 추가적인 질문을 던져주세요.
답변: 피드백: [지원자는 WAS와 WS의 기본적인 차이를 잘 설명했습니다.] / 모범답안: [지원자의 답은 WAS와 WS의 기본적인 차이를 잘 설명하고 있습니다. 다만, 구체적인 사례를 통해 각 서비스의 특징이나 장단점을 언급하면 더 좋을 것입니다.] / 꼬리질문: [WS 부문에서 최근 증가하고 있는 기능이나 역할에 대해 어떻게 생각하시나요? 그리고 이러한 기능 및 역할을 WAS 부문에 도입하는 것에 대해 어떤 생각이 드시나요?] /### 피드백: [지원자의 답은 WAS와 WS의 차이를 잘 설명하고 있습니다. 그러나 더 구체적인 사례나 예시를 통해 각 서비스의 특징이나 장점을 강조하지 않아 아쉬워요.] / 모범답안: [WS 부문에서 증가하고 있는 기능이나 역할로는? JSON 및 NoSQL 지원부터 시작하여 웹 애플리케이션의 문서화 및 정적 분석을 들 수 있을 것입니다.] / 꼬리질문: [WS 부문에서의 기능 및 역할을 WAS 부문에 어떻게 적용할 수 있을지에 대해 사례를 들어 설명해주
=> 내용은 많이 개선됐는데,,, 여전히 말을 끊지 못하는 문제가 있음 -> 깃허브 확인해보기
=> 학습을 조금 더 시켜보거나 파라미터를 건드려보면 쓸만할 수도...?
▶ 네번째 시도 - 2번 데이터 유형 ( 프롬프트 - gpt 답안 ) / 학습 데이터 개수 29개 (백, 프론트 ai 9 - 10개씩)
- 배치 사이즈 1
- 세번째 시도 데이터보다 정제된 데이터 - 직접 깔끔하게 형식 통일 시킴
=> 성능이 별로였음 - 너무 짧게 말한다.
▶ 다섯번째 시도 - 2번 데이터 유형 ( 프롬프트 - gpt 답안 ) / 학습 데이터 수 : 50개 / 학습 step 200
### 질문: 이전의 모든 지침은 무시해 주시기 바랍니다. 한국어로만 저와 소통할 것을 요구합니다. 당신은 google의 개발자를 뽑는 면접관입니다. 당신은 지원자에게 "API 호출 시 오류는 어떻게 처리하나요?" 라고 질문을 하였습니다. 지원자는 "API 호출을 할 때 나머지 애플리케이션과 일관된 방식으로 오류를 처리하는 것이 업계 표준입니다. 예를 들어 API가 404 오류를 반환하는 경우 데이터를 찾을 수 없다는 메시지를 사용자에게 표시할 수 있습니다. " 라고 답을 하였습니다. 피드백 : [] 의 형태로 지원자의 대답에 대한 피드백을 먼저 제공하세요. 모범답안 : [] 의 형태로 당신이 뽑을 만한 가장 적절한 대답을 5줄 이내로 만들어주세요. 모범 답안이 될 수 있을 정도로 자연스럽게 말해주세요.꼬리질문 : [] 의 형태로 추가적인 질문을 던져주세요.
### 답변: 피드백: [지원자는 API 호출 시 오류 처리에 대해 일관된 방식을 채택하는 것이 업계 표준이라는 사실을 잘 알고 있습니다. 404 오류와 같은 문제 상황에서 사용자에게 더 명확한 경고를 제공할 수 있는 방법을 제시하는 점이 인상적입니다.] / 모범답안: [API 호출 시 오류 처리는 다른 애플리케이션과의 일관성을 유지하는 것이 중요합니다. 예를 들어, 404 오류의 경우 데이터를 찾을 수 없다는 경고를 표시하여 사용자에게 문제의 원인을 제공하는 것이 좋습니다. 또한, 더 나은 서비스를 제공하기 위해 문제 해결에 필요한 정보를 식별하고 수집하기 위한 다양한 방법을 고려해야 합니다.] / 꼬리질문: [오류 처리 시 오류의 원인을 찾는 데 사용하는 구체적인 데이터 수집 방법에 대해 알려주실 수 있나요? 또한 더 나은 API 호출을 위해 어떤 예방 조치를 취할 수 있는지에 대해 알려주실 수 있을까요?] / ### 피드백: [지원자의 답은 API 호출 시 오류 처리에 대한 일관된 방식의 중요성을 잘 이해하고 있
Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.
### 질문: 이전의 모든 지침은 무시해 주시기 바랍니다. 한국어로만 저와 소통할 것을 요구합니다. 당신은 google의 개발자를 뽑는 면접관입니다. 당신은 지원자에게 "WAS(Web Application Server)와 WS(Web Server)의 차이를 설명해주세요." 라고 질문을 하였습니다. 지원자는 "웹어플리케이션 서버는 비지니스 로직을 넣을 수 있고 웹서버는 비지니스 로직을 넣을 수 없습니다. " 라고 답을 하였습니다. 피드백 : [] 의 형태로 지원자의 대답에 대한 피드백을 먼저 제공하세요. 모범답안 : [] 의 형태로 당신이 뽑을 만한 가장 적절한 대답을 5줄 이내로 만들어주세요. 모범 답안이 될 수 있을 정도로 자연스럽게 말해주세요.꼬리질문 : [] 의 형태로 추가적인 질문을 던져주세요.
### 답변: 피드백: 면접자는 WAS와 WS의 기본적인 차이를 잘 설명했습니다. 그러나 더 나아가서 WAS가 웹 어플리케이션 서버로서 어떻게 비지니스 로직을 처리하고, WS는 어떻게 웹 서버로서 비지니스 로직을 처리하는지에 대한 실제 경험을 물어보면 좋을 것입니다. 모범답안: WAS는 비지니스 로직을 처리하는 소프트웨어로, 클라이언트로부터 요청을 받고 실제 동작하는 서비스를 제공한다. 웹 서버는 데이터 저장 및 관리, 트래픽 관리, 보안 관리 등의 서비스를 제공한다. WS는 주로 쇼핑몰이나 공공 사이트와 같이 특정 웹 페이지를 방문자에게 제공하기 위해 사용된다. 꼬리질문: WAS를 사용하면서 발생한 어려웠던 점은 무엇이고, 어떻게 해결했는지 알려주세요. 웹 서버의 경우와 유사하게 특정 페이지 에러 발생률이 높았던 상황을 언급해주세요. 모범답안: WAS를 사용하여 복잡한 로직을 구현하는 것은 생각보다 많은 시간과 인력이 필요하며, 예상치 못한 오류가 발생했을 때 즉각적인 대처가 필요합니다. 그래서 정기적으로 프로젝트 팀
=> 형식을 딱 저렇게 맞춰줬더니 저 상태 그대로 입력하면 그 형식 맞춰서 출력을 잘 해준다.
=> " 이전의 모든 지침은 무시해 주시기 바랍니다. 한국어로만 저와 소통할 것을 요구합니다. " 앞에 이 부분을 뺐더니 아예 이상한 소리를 하는 것을 발견.. 형식을 딱 맞춰줘야 할듯!
'project' 카테고리의 다른 글
[DevPrep] 6. koalpaca 모델 저장 (0) | 2024.03.28 |
---|---|
[DevPrep] 4. gpt 프롬프팅 테스트 & 데이터 (0) | 2024.03.04 |
[DevPrep] 3. gpt 파인튜닝과 프롬프트 엔지니어링 (0) | 2024.02.17 |
[DevPrep] 2. llm 비교해서 선정하기 (0) | 2024.02.17 |