23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
안녕하세요, DEVOCEAN YOUNG 2기 구해줘의 나건주입니다.
11월 3일, Supex 홀에서 조별 개발 프로젝트 발표가 있었습니다.
저희 조는 데보션 개선 프로젝트를 주제로 진행했으며 저희 프로젝트를 소개해보겠습니다.
저희 프로젝트의 첫 목표는 현재 글의 초기 부분을 잘라서 보여주는 미리보기 페이지를 요약해서 제공하는 개선사항으로 시작하였습니다.
이를 위해 처음에는 KoBART, KoGPT 등 언어모델을 활용해 요약하는 모델을 기획하였습니다.
그래서 데보션의 블로그 글을 수집하여 GPT-3.5-turbo를 활용하여 요약하는 데이터셋을 구축하였습니다.
하지만 블로그 글의 평균 길이는 2000자 이상으로 512 Token 모델의 길이로 한정시키기엔 내용을 모두 담을 수 없다는 단점을 가지고 있었습니다.
그래서 최근 LLM 모델의 발달과 LoRA 같은 학습 방법론이 떠오르는 만큼 데보션에 맞는 한국어 Code LLM을 개발해보고자 프로젝트를 변경하였습니다.
데보션 웹에 있는 블로그, 스페이스, 뉴스, 스크랩 등 정보를 모두 크롤링했습니다. (약 800개)
KoAlpaca, Kullm 등 한국어 LLM 모델에 활용된 데이터셋을 모두 수집하였습니다.
수집한 데이터셋 중 데보션 데이터는 GPT-3.5-turbo를 통해 Instruct 데이터셋을 생성하였습니다.
이때 Alpaca 연구에서 활용한 Prompt를 약간 수정하여 다음과 같은 방식으로 제작하였습니다.
다음 제목과 글을 읽고 지시, 답변, 추천 내용을 생성해주세요. 이러한 작업 지침은 ChatGPT 모델에 주어지며, ChatGPT 모델이 지침을 완료하는지 평가합니다.\n
제목: {row['Title']}
글:{row['Content']}
태그: {row['Tags']}
1. 다양성을 극대화하기 위해 각 지시에 대해 동사를 반복하지 않도록 하세요.
2. 지시에 사용되는 언어도 다양해야 합니다. 예를 들어, 질문과 명령형 지시를 결합해야 합니다.
3. 지시 사항의 유형이 다양해야 합니다.
4. 답변은 한국어로 작성해야 합니다.
5. 답변을 1~2문장으로 작성하세요. 명령문이나 질문도 허용됩니다.
6. 출력은 지시와 글에 대한 적절한 응답이어야 합니다.
7. 추천 태그에는 제공된 태그 중에서 선택해야 합니다.
8. 주어진 태그가 없다면 {a}에서 지시에 알맞은 태그를 골라서 추천해주세요.
아래에 8개의 명령어와 입력(옵션)에 따라 적절한 응답을 생성하세요.
응답은 아래와 같은 형식으로 5가지를 0번 부터 5번 까지, 번호에 따라 해당 번호의 명령어와 입력에 알맞게 작성하세요.
지시0: 첫 번째 지시내용
답변0: 첫 번째 응답내용
추천 내용0: 첫 번째 추천 태그###
지시1: 두 번째 지시내용
답변1: 두 번째 응답내용
추천 내용1: 두 번째 추천 태그###
...
지시4: 마지막 지시내용
답변4: 마지막 응답내용
추천 내용4: 마지막 추천 태그공개된 데이터셋에서 코드와 관련된 키워드가 존재하는 약 10만개의 데이터셋을 필터링하였습니다.
생성한 QA 데이터셋(약 4천개), 공개된 Instruct 데이터셋 (약 10만개), 요약 데이터셋 (약 1천개)를 생성하였습니다.
생성된 QA 데이터셋 예시는 다음과 같습니다.
지시0: 코드 리뷰 프로세스의 문제점을 해결하기 위한 방법을 제안하세요.
답변0: 코드 리뷰 프로세스의 문제점을 해결하기 위해, PR 리뷰어가 리뷰하는 데 더 적은 노력을 들이면서도 빠르고 밀도 있는 리뷰를 할 수 있는 방법을 도입해야 합니다.개발 커뮤니티라는 특성상 LLaMA-2, Code-LLaMa, Code-LLaMa Instruct 세가지 모델을 비교하였습니다.
이때 문제는 LLaMa는 한국어 학습 데이터가 적다는 문제와 Instruct 데이터셋을 Fine tuning 하지 않았다는 문제를 비교하기 위해 세가지 모델을 선정하였습니다.
Code-LLaMa : https://huggingface.co/codellama/CodeLlama-7b-hf
Code-LLAMa Instruct : https://huggingface.co/codellama/CodeLlama-7b-Instruct-hf
PEFT 방법 중 LoRA 기법을 통해 학습하는 방법과, SFT를 활용한 학습 두가지를 실험하였습니다.
이때 LoRA 학습 시간이 더 오래 소요되었으며, SFT를 LoRA로 학습한 경우에는 GPU RAM이 16기가 이내로 수행되는 모습을 보였습니다.
목표했던 바는 데보션 데이터셋이 양질의 데이터셋을 생성했을까?, Code-LLaMa가 학습했던 내용을 변형시키진 않을까? 라는 부분을 확인하였습니다.
학습 참고 자료 : https://huggingface.co/blog/llama2#using-transformers
PEFT 참고 자료 : https://devocean.sk.com/search/techBoardDetail.do?ID=164779
한정된 GPU (colab pro)로 여러 Task에 대해 테스트할 필요가 있었지만 정성적으로 몇몇 Instruct Prompt를 통해 비교하였습니다.
최종적으로는 DEVOCEAN 데이터셋만을 이용하여 학습한 모델의 결과가 활용되었습니다.
pipe('''### Instruction: 아래 글을 요약해줘. 글: 개요
바야흐르 LLM 시대입니다. 현재의 LLM은 모두 구글의 트랜스포머에서 파생된 GPT 구조로 되어 있는데요.
기사에서 LLM을 소개할 때에 GPT3는 1,750억개의 파라미터다, 메타의 라마2는 70B (700억) 규모이다 등으로 언급하는 것을 볼 수 있습니다.
이런 파라미터 개수는 어떻게 계산할까요? GPT 모델의 크기를 학습 전에 계산하는 방법을 설명하겠습니다.
우선, 학습 후에는 그냥 모델 체크포인트 파일의 크기를 보고 2로 나누어주면 됩니다.
이것은 보통 파라미터 하나를 fp16, bf16 등 2바이트로 학습시켜서 그렇습니다.
fp32로 학습한 경우에는 4로 나누어 주어야 하고, 최신 모델이라서 fp8 학습을 했다면 나누어줄 필요가 없습니다.
계산 방법
학습 후에는 모델의 크기를 쉽게 알 수 있지만, LLM은 한번 학습하는 데 오래 걸리기 때문에 학습 전에 공식을 통해 파라미터 수를 계산하고 싶습니다.
GPT의 구조를 알면 모델 크기를 계산할 수 있습니다.### Response:''',max_new_tokens =200)학습한 모델 결과
GPT 모델의 크기를 계산하는 방법은 다음과 같습니다. 모델의 파라미터 개수를 계산합니다.
파라미터 개수를 통해 모델의 크기를 계산합니다. 파라미터 개수 계산\n모델의 파라미터 개수를 계산하기 위해서는 모델의 구조를....
LLaMa-2 결과
알겠습니다. 작업을 시작하기 전에 작업에 대한 설명을 알려주시겠습니까?
### 질문: 작업 완료 후 작업 완료 후 작업 완료 후 작업 완료 후 작업 완료 후 작업 완료 후 작업 완료
Code-LLaMa Instruct 결과
GPT 모델의 크기를 계산하는 방법은 다음과 같습니다.
모델의 파라미터 개수를 계산합니다.
모델의 파라미터 개수를 2로 나누어 파라미터 개수를 구합니다.
파라미터 개수를 1000으로 나누어 모델의 크기를 구합니다.
학습한 모델과 Code-LLaMa Instruct 결과는 큰 차이를 보이지 않는 모습을 보이는 것으로 나타났지만, LLaMa-2는 다른 답변을 내놓는 모습을 보였습니다.
pipe('''### Instruction: 파이썬으로 리스트를 생성하는 코드를 작성해줘.### Response:''',max_new_tokens =200)학습한 모델 결과
리스트를 생성하는 파이썬 코드는 다음과 같습니다.
my_list = [1, 2, 3, 4, 5]\n\n이 코드는 리스트를 생성하고, 각 요소에 1부터 5까지의 값을 할당합니다.\n\n리스트를 생성하는 방법은 다양합니다.
위 코드는 리스트를 생성하는 가장 기본적인 방법입니다.
LLaMa-2 결과
다음은 파이썬으로 리스트를 생성하는 코드입니다.
목록 = [x for x in range(10)]
print(목록)
# 출력: [10]
# 버그가 있는지 코드를 검사하는 것을 잊지 마십시오.
Code-LLaMa Instruct 결과
my_list = [1, 2, 3, 4, 5]
학습한 모델의 결과가 조금 더 구체적인 설명을 덧붙여주는 모습을 보였습니다.
pipe('''### Instruction: pycaret이 무엇인지 간략하게 설명해주세요.### Response:''',max_new_tokens =200)학습한 모델 결과
pycaret은 데이터 분석을 위한 라이브러리로, 데이터 전처리, 모델링, 평가, 시각화 등을 포함하고 있습니다.
또한, 데이터 분석을 위한 다양한 기능을 제공하고 있습니다.
LLaMa-2 결과
pycaret은 코드 생성 및 테스트를 위한 자동화된 도구입니다. 이 도구는 코드 생성 및 테스트를 위한 자동화된 도구로, 코드 생성 및 테스트를 위한 자동화된 도구입니다.
이 도구는 코드 생성 및 테스트를 위한 자동화된 도구로, 코드 생성 및 테스트를 위한 자동화된...
Code-LLaMa Instruct 결과
pycaret은 데이터 분석 및 기계 학습 프로세스를 자동화하는 오픈 소스 라이브러리입니다.
데이터 준비, 모델 선택, 하이퍼 파라미터 튜닝, 모델 평가 및 모델 배포를 포함하여 데이터 과학 프로세스의 각 단계를 자동화하는 데 도움이 되는 ...
결과가 조금씩 다르지만, 학습한 모델은 데보션에서 생성된 QA 데이터셋의 대답으로 해주는 모습을 보였습니다.
다만 Code-LLaMa Instruct 결과가 조금 더 구체적인 모습을 보였습니다.
pipe('''### Instruction: 데보션이 무엇인지 간략하게 설명해주세요. ### Response:''',max_new_tokens =200)학습한 모델 결과
데보션은 데보션 플랫폼을 통해 데보션 멤버들이 질문하고 답변하는 커뮤니티입니다.
데보션은 데보션 멤버들이 질문하고 답변하는 커뮤니티입니다. 데보션은 데보션 멤버들이 질문하고 답변하는 커뮤니티입니다.
LLaMa-2 결과
데보션은 컴퓨터 프로그램이 실행되는 동안 프로그램이 실행되는 동안 컴퓨터 프로그램이 실행되는 동안 컴퓨터 프로그램이 실행되는 동안...
Code-LLaMa Instruct 결과
데보션이 무엇인지 간략하게 설명해주세요
학습 데이터셋에 데보션에 대한 설명도 넣었는데 올바르게 응답하는 모습을 보였습니다.
프로젝트를 진행하면서 많은 아쉬운 점이 있었습니다.
GPT API의 불안정성
GPT API의 불안정성으로 데이터셋 생성에 오랜 시간이 투자되어 모델 학습 시간을 적게 투자한 점이 아쉬웠습니다.
데보션 데이터셋의 퀄리티
공개된 한국어 LLM 데이터셋은 대부분 영어 데이터셋의 번역된 형태를 띄고 있는데 이때 파이썬에서 def를 함수로 번역한 형태도 있는 등 퀄리티의 문제가 발생하는 경우가 많았습니다.
그 결과 총 10만개 이상의 데이터셋을 학습한 것 보다 3천개의 데이터셋을 학습한 퀄리티가 더 좋게 나타났습니다.
LLM 모델의 리소스 문제
LoRA 기법을 통해 Single GPU에서도 7B 모델까지 학습할 수 있었지만, 모델 추론 단계에서 오랜 시간이 걸리는 것은 해결하기 어려웠습니다.
이로 인해 적절한 응답을 했다는 평가를 진행하지 못한 점이 아쉬웠습니다.
또한 배포에도 많은 비용이 소모된다는 점에 해결하지 못했던 것도 아쉬웠습니다.
최근 많은 LLM 모델이 나오고, 데이터셋 생성부터 학습까지 연구가 진행되고 있었는데 이를 직접 경험해볼 수 있었던 좋은 기회였던 것 같습니다.
다만 MLops 환경, Self Instruct 등 해보고 싶은 방법들이 많았지만 비용 문제로 진행하지 못했던 것이 아쉬웠던 프로젝트였습니다.
학습한 모델 : https://huggingface.co/keonju/ko-ref-llama2-7b-Inst-7b-Instruct-hfdevocean_sft_model
에서 사용하실 수 있습니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.