top of page

AWS로 쉽게 시작하는 GenAI Fine-tuning

AWS로 쉽게 시작하는 GenAI Fine-tuning: LLM과 Fine-tuning에 대해 알아보고 SageMaker 환경 세팅하기

AWS로 쉽게 시작하는 GenAI FIne-tuning (1) - AWS SageMaker에서 Fine0tuning 환경 세팅하기

Written by Hyejin Jeon



안녕하세요, 스마일샤크의 전혜진입니다.


19일에 AWS 파트너사를 대상으로 진행했던 GenAI Fine-tuning Techniques 워크샵에 참석하게 됐는데요, 굉장히 깊이 있고 유익했던 내용이어서 이 내용을 쉽고 흥미롭게 풀어서 여러분과 나눠보려고 합니다.


이날 워크샵에 굉장히 많은 파트너사 분들이 참석해주셔서 GenAI에 대한 엄청난 관심을 느낄 수 있었습니다…!


기본 모델과 튜닝한 모델 비교

AI 전문 기업들이 Foundation 모델을 직접 제작하고 있습니다. 이 Foundation 모델을 제작하려면 방대한 데이터가 있어야 하고, 과정 또한 굉장히 어렵고 복잡합니다. 그래서 AI 전문 지식이 없다면 이미 만들어진 Foundation 모델을 튜닝한 서비스(예: ChatGPT)를 이용하거나 간단한 튜닝 정도는 직접 해볼 수 있습니다.


여기서 ‘튜닝’이란 사전에 학습된 Foundation 모델을 특정 작업에 더 적합하게 추가 학습을 시키는 것입니다. 사용자가 로컬 환경에서 이러한 튜닝 작업을 하려면 성능이 좋은 하드웨어와 소프트웨어, 가상 환경 등이 필요한데요, AWS 클라우드 환경에서는 이렇게 복잡한 환경 세팅 없이 튜닝 작업을 하실 수 있습니다.


Foundation 모델 중 텍스트 데이터를 처리하는 Large Language Models(LLM)를 중심으로 튜닝을 진행해 볼 건데요, 먼저 이 LLM의 개념과 LLM 모델의 진화 과정에 대해 간단히 설명해 드리겠습니다.


 
 


Large Language Models(LLM) 훑어보기

언어 모델이란? 가장 자연스러운 단어 시퀀스를 찾아내는 모델

가장 자연스러운 단어 시퀀스를 찾아내려면 이전 단어들이 주어졌을 때 다음 단어를 예측하도록 해야 하는데요,

예를 들어, “나는 이 자료를 만들기 위해 오늘도 을” 뒤에 올 서술어는 무엇일까요?

  1. 지새웠다.

  2. 까서 구워 먹었다.

문맥상 ‘1번 지새웠다’가 맞지만 여기서 이 먹는 밤을 의미한다면 뒤에 올 서술어가 달라지겠죠?


이렇게 이전 단계에서의 데이터 정보를 기억해서 다음 단계의 처리에 사용하는 것을 시퀀스 분석이라고 합니다.

그렇다면 짧은 단어가 아닌 하나의 문장으로 다른 문장을 예측해야 한다면 어떨까요?

데이터가 길어지면 그만큼 긴 시퀀스에서 정보를 유지해야 하므로 비효율적일 수밖에 없습니다.


이러한 의존성을 문제를 해결하기 위해 Seq2Seq, LSTM, GRU 등 여러 시퀀스 분석 모델들이 차례로 등장했는데요, 그 중 최종적으로 Transformer 모델이 등장하고 이 모든 문제를 해결할 수 있었습니다.

Transformer 모델 : 문장 전체를 분석하여 'it'이 'the animal'을 가리키는 것을 이해하고, 이를 바탕으로 문장의 전체적인 의미를 파악함

예를 들어, 위 문장에서 "it"이라는 대명사가 "The animal"을 의미한다는 것은 인간은 파악하기 쉽지만, 기계는 파악하기 어렵습니다.


그래서 Transformer는 이전 기법들과 다르게 문장의 모든 단어를 한 번에 보고, 각 단어가 서로 어떻게 연결되어 있는지 파악합니다.


이 Transformer 모델은 대규모 모델인데요, 앞서 말씀드렸다시피 대규모 모델을 처음부터 학습하려면 많은 양의 데이터가 필요하고 비용도 많이 듭니다.


따라서 우리는 Hugging Face 사에서 제공하는 Transformer 라이브러리를 사용하여 튜닝 작업을 진행해 볼 건데요, 이 튜닝 작업에 대해 간단히 설명드리고 실습으로 넘어가겠습니다.



Fine-tuning은 어떻게 이루어지나요?

Fine-tuning이란? 미리 훈련된 모델을 특정 작업이나 데이터셋에 맞게 미세 조정하는 과정

주로 인공지능 특정 도메인(의료, 금융, 게임 등)이나 특정 작업에 최적화하거나 모델의 성능을 향상시키기 위해 Fine-tuning 하게 됩니다.


데이터셋 전처리

1. 허브에서 데이터셋 로딩

Hugging Face 허브에서 데이터셋을 로드합니다.


from datasets import load_dataset

data = load_dataset(data_path)

2. Tokenization (토큰화)

기계가 문장의 구조를 이해하려면 입력된 텍스트를 더 작은 부분, 즉 token으로 분리해야 합니다.


그러려면 인간의 언어로 된 텍스트를 모델이 이해할 수 있는 숫자로 변환해야하는데요, 이러한 과정을 토큰화라고 하고 Tokenizer를 통해 처리합니다.


from transformers import GPTNeoXTokenizerFast

tokenizer = GPTNeoXTokenizerFast.from_pretrained("nlpai-lab/kullm-polyglot-12.8b-v2")
result = tokenizer(raw_datasets["train"]["sentence1"])

위 코드를 사용하여 사용자가 입력한 프롬프트를 토큰화하여 반환하는 작업까지 해줘야 하는데, 그 부분은 빠른 진행을 위해 생략하겠습니다.


모델 로드

  • 모델을 로드하는 환경은 Amazon SageMaker를 전제로 합니다.

  • snapshot_downlaod 함수를 사용하여 Hugging Face 허브에서 특정 모델을 다운로드합니다.

  • 참고: SageMaker의 Jupyter 노트북 인스턴스 환경을 세팅하는 방법은 글 하단을 참고하세요.


from huggingface_hub import snapshot_download

snapshot_download("nlpai-lab/kullm-polyglot-12.8b-v2", local_dir=local_dir, allow_patterns=["*.json", "*.pt", "*.bin", "*.txt", "*.model"])

Training

  • SageMaker의 Estimator 객체의 estimator.fit 메서드를 이용하여 학습을 시작합니다.

  • fast_file 람다 함수는 TrainingInput을 사용하여 학습 데이터의 S3 경로를 설정합니다.


fast_file = lambda x: TrainingInput(x, input_mode="FastFile")
    estimator.fit(
        {
            "pretrained": [사전학습된 모델 경로],
            "training": [전처리된 데이터셋 경로] ,
        },
        wait=False
    )

이렇게 Fine-tuning 과정을 간단하게 알아보았습니다.


사용자의 로컬 환경에서 Fine-tuning을 진행하려면 대규모 컴퓨팅 자원이 필요하고, 이러한 리소스 요구사항을 준비하기 쉽지 않습니다.


AWS 클라우드를 통해 쉽고 간편하게 Fine-tuning을 경험해 보실 수 있는데요, 아래는 2024년 1월 기준 AWS 클라우드의 Fine-tuning 서비스입니다.


SageMaker는 머신 러닝 모델 생성, 학습 및 배포의 전 과정을 좀 더 디테일하게 제어할 수 있는 서비스이고, Bedrock은 이러한 과정들을 AWS에서 완전히 관리해 주는 서비스로 인프라 관리에 대한 걱정 없이 고급 AI 기능을 사용하실 수 있습니다.

서비스

특징

Instruction Tuning(Supervised)

Domain-Adaptation (Self-Supervised)

Alignment Tuning

한국어 지원

난이도

Amazon Bedrock

Serverless API 기반의 관전 관리형 서비스

Meta Llama2, Cohere Command, Amazon Titan

Amazon Titan

Not Yet

미지원

낮음

SageMaker JumpStart

파운데이션 모델 서브로서 UI 및 API를 제공하고 파인튜닝, 디폴트 데이터셋, 추론 스크립트 제공

Mistral 7B, Falcon 7/40B, GPT-J 6B

Mistral 7B, Falcon 7/40B, GPT-J 6B

Not Yet

미지원

낮음

SageMaker Training

완전 관리형 서비스로 확장성/프로덕션 측면의 모델 훈련 배포에 최적화된 서비스

Available for and models (e.g. Hugging Face)

Available for and models (e.g. Hugging Face)

Available

지원

중간

SageMaker HyperPod

대규모 ML 병렬 훈련을 위한 탄력적인 컴퓨팅 클러스터를 제공

Available for and models (e.g. Hugging Face)

Available for and models (e.g. Hugging Face)

Available

지원

중간/높음

AWS Innovation Center

Private 파인 튜닝 서비스

Anthropic Claude

Anthropic Claude

Available

지원

중간



학습을 위한 SageMaker 세팅하기

SageMaker는 AWS에서 제공하는 머신러닝 서비스인데요, 그중 SageMaker Notebook을 사용하여 클라우드 기반의 Jupyter 노트북 인스턴스에서 머신러닝 모델을 개발하거나 훈련할 수 있습니다. 바로 SageMaker에서 Fine-tuning 환경을 세팅해 볼까요?


※ 주의! 리소스 사용량 및 비용에 대한 책임은 사용자에게 있습니다.


SageMaker 환경 세팅

1. AWS 콘솔에 로그인한 후 Support 서비스로 들어갑니다.

우리는 ml.g5 인스턴스 유형을 사용해야 하는데 이 인스턴스 패밀리는 AWS에 서비스 제한 증가를 요청해야 합니다.

서비스 할당량 증가 요청을 선택한 뒤 이용하려는 리전 선택 후 ml.g5.xlarge 또는 ml.g5.2xlarge의 할당량 값을 1로 늘려줍니다.

AWS Support > 지원 사례 > 사례 생성 > 서비스 할당량 증가

2. 할당량 생성이 완료되었으면 Amazon SageMaker 서비스로 들어갑니다. 왼쪽의 노트북 - 노트북 인스턴스 메뉴에서 노트북 인스턴스 생성 버튼을 클릭합니다.


3. 노트북 인스턴스 이름은 자유롭게 입력해 주시고, 나머지 설정은 입력창에 아래와 같이 설정해 주시면 됩니다.

Git 리포지토리 설정


Jupyter 노트북 접속

1. 생성된 노트북 인스턴스의 JupyterLab을 열어주세요.


JupyterLab 열기


2. Git 리포지토리에서 받아온 학습 예제에서 fine-tuning 디렉토리를 열어주세요. 학습 예제에 fine-tuning에 필요한 스크립트가 미리 준비되어 있어서 여러분들은 각 셀을 클릭한 뒤 셀 실행 버튼만 눌러주시면 됩니다.


Git 리포지토리에서 받아온 학습예제에서 fine-tuning 디렉토리 열기

3. 셀이 실행 중이면 [*]로 표시되고, 실행이 완료되면 [숫자]가 표시되니, 이 점 참고하셔서 순차적으로 셀을 실행해 주세요.


셀 실행중
셀 실행중
셀 실행 완료
셀 실행 완료


자, 여기까지 워크샵 실습 환경을 세팅하는 방법을 알려드렸는데요, AWS에서 제공하는 학습 예제에 친절하게 설명이 되어 있으니 차근차근 셀을 실행하시면서 Fine-tuning에 대해 학습하시면 좋을 것 같습니다.



AWS AI 서비스와 클라우드에 대해 더 많은 정보를 원하시나요?

스마일샤크의 클라우드 전문가들이 여러분의 질문에 친절하고 상세하게 답변해 드릴 준비가 되어 있습니다.

부담 없이 문의해 주세요!


스마일샤크 문의하기

조회수 991회댓글 0개

관련 게시물

전체 보기

Comments


bottom of page