paint-brush
AWS SageMaker에서 MPT-7B를 실행하는 방법: mosaicML의 ChatGPT 경쟁자~에 의해@redgeoff
444 판독값
444 판독값

AWS SageMaker에서 MPT-7B를 실행하는 방법: mosaicML의 ChatGPT 경쟁자

~에 의해 Geoff Cox8m2023/07/19
Read on Terminal Reader
Read this story w/o Javascript

너무 오래; 읽다

블로그 게시물에서는 자체 인프라에서 챗봇 모델을 실행하기 위한 OpenAI의 ChatGPT 대신 모자이크ML의 MPT-7B를 소개합니다. AWS SageMaker에서 MPT-7B를 실행하는 방법에 대한 단계별 가이드를 제공하여 비용 제어, 쉬운 반복 및 프로덕션으로 전환하는 기능과 같은 이점을 강조합니다. 또한 이 게시물에서는 모델의 성능 비교 및 과제에 대해 논의하고 데이터 개인 정보 보호 및 비용 효율성의 중요성을 강조합니다.
featured image - AWS SageMaker에서 MPT-7B를 실행하는 방법: mosaicML의 ChatGPT 경쟁자
Geoff Cox HackerNoon profile picture
0-item
1-item
2-item

이 블로그 게시물에서는 자체 AWS SageMaker 인스턴스에서 mosaicML의 ChatGPT 경쟁자인 MPT-7B를 실행하는 프로세스를 단계별로 안내하겠습니다.


ChatGPT의 기능에 기대가 되지만 OpenAI에 민감한 데이터가 노출되는 것에 대해 우려하고 계십니까? 다행히도 자체 인프라에서 실행할 수 있는 대안이 있습니다. 그러한 대안 중 하나는 ChatGPT의 경쟁 제품인 mosaicML의 MPT-7b이며, 이 블로그 게시물에서 이에 대해 살펴보겠습니다.

mosaicML 및 MPT-7B 소개

최근 Databricks가 13억 달러에 인수한 mosaicML은 ChatGPT의 경쟁자로 추정되는 MPT-7B 모델로 ML 커뮤니티에 파장을 일으키고 있습니다. 이러한 약속에도 불구하고 이 모델을 실행하는 것은 문서가 부족하고 리소스 요구 사항이 높기 때문에 어려울 수 있습니다. 그러나 초보자에게 친숙하고 신속한 반복을 위한 유연성이 뛰어난 환경인 Jupyter 노트북의 AWS SageMaker에서 MPT-7B를 실행할 수 있습니다. 이 설정을 사용하면 생산으로 이동하기로 결정하기 전에 모델의 타당성과 하드웨어 요구 사항을 테스트할 수 있습니다.

AWS SageMaker에서 MPT-7B 실행

AWS SageMaker의 Jupyter 노트북에서 MPT-7B를 실행하면 여러 가지 이점이 있습니다. 사용한 만큼만 비용을 지불하고 작업이 끝나면 끌 수 있을 뿐만 아니라, 모델을 다시 로드할 필요 없이 코드 일부를 쉽게 다시 실행할 수 있어 반복 개발 중에 시간이 절약됩니다. 하지만 조심하세요! 노트북 인스턴스 중지를 잊어버리면 요금이 빠르게 합산될 수 있습니다.


이 방법은 상대적으로 편리하지만 고려해야 할 몇 가지 고려 사항이 있습니다. 첫째, 고성능 GPU에서도 모델을 로드하는 데 최대 20분이 걸릴 수 있으므로 이 프로세스에는 다소 시간이 많이 걸립니다. 또한, 운영 비용이 시간당 최소 4달러 이상이므로 비용도 고려해야 할 요소입니다. 최소한 p3.2xlarge 인스턴스에서 MPT-7B를 실행해야 합니다. 더 작은 것은 실현 가능하지 않은 것 같습니다. SageMaker 대신 EC2를 선택하는 경우 AWS에 p3.2xlarge 인스턴스 사용 권한을 요청해야 합니다.


다음 섹션에서는 SageMaker jupyter 노트북에서 MPT-7B 모델을 실행하는 방법을 단계별로 안내하겠습니다.

1단계 - SageMaker 콘솔 열기

AWS 콘솔을 실행하고 SageMaker를 검색합니다.


SageMaker를 검색하세요. 이미지 출처: 작성자

2단계 - 노트북 인스턴스 생성

왼쪽 메뉴에서 노트북->노트북 인스턴스를 선택합니다.


노트북 인스턴스. 이미지 출처: 작성자


노트북 인스턴스 생성 버튼을 클릭합니다.


노트북 인스턴스를 만듭니다. 이미지 출처: 작성자


인스턴스 이름을 지정합니다. 인스턴스 유형 m1.p3.2xlarge 를 선택합니다. 불행하게도 m1.p3.2xlarge 만큼 강력한 인스턴스가 필요한 것 같습니다. 그렇지 않으면 인스턴스가 메모리가 부족하거나 가장 간단한 질문에도 응답하는 데 과도한 시간이 걸릴 수 있습니다. 그러나 이 인스턴스의 비용은 시간당 약 4달러이므로 사용량을 주의 깊게 모니터링하는 것이 중요합니다.


노트북 인스턴스 세부정보를 지정합니다. 이미지 출처: 작성자


새 IAM 역할을 생성합니다.


새 역할을 만듭니다. 이미지 출처: 작성자


테스트 환경에 특별히 민감한 데이터가 없으면 모든 S3 버킷 에 대한 액세스 권한을 부여할 수 있습니다. 그렇지 않으면 좀 더 명확하게 설명해야 합니다.


S3 액세스를 지정합니다. 이미지 출처: 작성자


노트북 인스턴스 생성 버튼을 클릭합니다.


노트북 인스턴스를 만듭니다. 이미지 출처: 작성자


그러면 노트북은 보류 중 상태가 됩니다. 이 작업은 약 10분 동안 지속됩니다.


보류 중인 노트북 인스턴스입니다. 이미지 출처: 작성자


그동안 AWS SageMaker 인스턴스가 프로비저닝을 완료한 후 업로드할 수 있도록 노트북을 다운로드하겠습니다.

3단계 - 노트북 다운로드

AWS SageMaker.ipynb의 MPT-7B 에 있는 노트북으로 가서 다운로드하세요.


Google Colab의 노트북입니다. 이미지 출처: 작성자



노트북을 다운로드하세요. 이미지 출처: 작성자


이 노트북에는 두 가지 주요 코드 블록이 있습니다. 첫 번째 블록은 MPT-7B 토크나이저 및 모델을 로드합니다.


 from torch import cuda, bfloat16 from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig device = f'cuda:{cuda.current_device()}' if cuda.is_available() else 'cpu' tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True) config={"init_device": "meta"} model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True, config=config, torch_dtype=bfloat16) print(f"device={device}") print('model loaded')


토크나이저는 모델에 전송된 질문을 인코딩하고 모델의 응답을 디코딩하는 데 사용됩니다. 또한 나중에 이를 활용하도록 모델을 구성할 수 있도록 GPU에 대한 장치 사양을 얻습니다.


 import time from IPython.display import Markdown import torch from transformers import StoppingCriteria, StoppingCriteriaList # mtp-7b is trained to add "<|endoftext|>" at the end of generations stop_token_ids = [tokenizer.eos_token_id] # Define custom stopping criteria object. # Source: https://github.com/pinecone-io/examples/blob/master/generation/llm-field-guide/mpt-7b/mpt-7b-huggingface-langchain.ipynb class StopOnTokens(StoppingCriteria): def __call__(self, input_ids: torch.LongTensor,scores: torch.FloatTensor, **kwargs) -> bool: for stop_id in stop_token_ids: if input_ids[0][-1] == stop_id: return True return False stopping_criteria = StoppingCriteriaList([StopOnTokens()]) def ask_question(question, max_length=100): start_time = time.time() # Encode the question input_ids = tokenizer.encode(question, return_tensors='pt') # Use the GPU input_ids = input_ids.to(device) # Generate a response output = model.generate( input_ids, max_new_tokens=max_length, temperature=0.9, stopping_criteria=stopping_criteria ) # Decode the response response = tokenizer.decode(output[:, input_ids.shape[-1]:][0], skip_special_tokens=True) end_time = time.time() duration = end_time - start_time display(Markdown(response)) print("Function duration:", duration, "seconds")


stopping_critera 를 사용하는 것이 필요합니다. 그렇지 않으면 모델이 질문에 답한 후에도 계속 옹알이를 시작할 것입니다.


다양한 옵션을 탐색하려면 모델 생성 매개변수를 참조하세요.


이제 이 노트북을 SageMaker에 업로드하겠습니다.

4단계 - 노트북 업로드

이번에는 SageMaker 노트북 인스턴스 프로비저닝이 완료되기를 바랍니다. 완료되면 Open Jupyter 링크를 클릭합니다.


주피터를 엽니다. 이미지 출처: 작성자


그런 다음 화면 오른쪽 상단에 있는 업로드 버튼을 클릭하고 방금 다운로드한 노트북을 선택하세요.


노트북을 업로드하세요. 이미지 출처: 작성자


커널을 conda_python3 으로 설정합니다.


커널을 설정합니다. 이미지 출처: 작성자


5단계 - 노트북 실행

셀 -> 모두 실행을 선택합니다.


모든 셀을 실행합니다. 이미지 출처: 작성자


그러면 모래시계 로고가 브라우저 탭에 나타납니다.


노트북을 기다리세요. 이미지 출처: 작성자


그런 다음 모델이 다운로드될 때까지 약 10분 정도 기다려야 합니다.


모델을 다운로드합니다. 이미지 출처: 작성자


실행 후에는 핵분열과 핵융합의 차이점을 설명해주세요 .라는 질문에 대한 답을 볼 수 있습니다.


핵분열과 핵융합의 차이점을 설명해주세요. 이미지 출처: 작성자


위에서 모델과 토크나이저가 이미 로드되었으므로, 간단히 Ask_question 코드 블록을 수정하고 실행 버튼을 클릭하여 다른 질문을 할 수 있습니다. 이렇게 하면 새로운 질문을 테스트할 때마다 10분을 소비하지 않아도 됩니다.


프랑스의 수도는 무엇입니까?. 이미지 출처: 작성자


6단계 - 노트북 중지

모델 테스트를 마치자마자 노트북 인스턴스 목록으로 돌아가서 중지하고 싶을 것입니다. 그렇지 않으면 시간당 4달러가 매우 빨리 합산될 것입니다 💸


노트북을 중지합니다. 이미지 출처: 작성자


성능 비교

성능 측면에서 예비 테스트에 따르면 MPT-7B의 결과는 ChatGPT만큼 좋지 않을 수 있습니다. 다음과 같은 질문에 대답하는 것이 적절합니다.

  • 프랑스의 수도는 무엇입니까? ,
  • 핵분열과 핵융합의 차이점을 설명해주세요
  • csv를 pdf로 변환하는 Python 코드를 작성하세요 .


하지만 '벨리즈의 수도는 어디인가요?'와 같은 질문의 경우 꽤 끔찍하게 실패합니다.


벨리즈의 수도는 무엇입니까?. 이미지 출처: 작성자


현재 더 많은 데이터를 수집하고 있으며 후속 블로그 게시물에서 포괄적인 비교 분석을 수행할 예정입니다. 해당 포스팅에서는 실제 대화 내역을 활용하여 MPT-7B, MPT-30B, Falcon-40b, ChatGPT의 질의응답 성능을 비교해보겠습니다.

테스트부터 생산까지

테스트에서 프로덕션으로 전환할 준비가 되면 SageMaker는 모델에 대한 엔드포인트를 생성할 수 있는 기능이라는 추가적인 이점을 제공합니다. SageMaker를 사용하면 수요에 따라 엔드포인트까지 자동 확장하여 리소스를 최적화할 수 있습니다.

추가 팁

Jupyter 노트북에서 실행하는 동안 프로세스가 분기되어 메모리가 부족해지기 쉽다는 점에 유의하세요. 이런 일이 발생하면 간단히 커널을 종료하고 모든 명령을 다시 실행하십시오.


AWS 이외의 플랫폼에서 이 모델을 실행하는 데 관심이 있다면 Google Colab Pro는 월 9달러의 또 다른 실행 가능한 옵션입니다. 그러나 테스트 결과, 제공된 크레딧이 단 몇 시간 내에 소진된 것으로 나타났습니다. 😳


직면할 수 있는 또 다른 문제는 CUDA 버전 비호환성으로 인해 SageMaker에서 Triton 최적화를 활용할 수 없다는 것입니다. 안타깝게도 AWS의 현재 P3 인스턴스에는 최신 CUDA 버전이 포함되어 있지 않습니다. 따라서 Triton 최적화를 활용하려면 명령줄 액세스가 가능한 EC2 컨테이너를 생성해야 합니다. 그러나 8개의 VCPU로 인스턴스를 실행하려면 AWS Support의 특별 권한도 필요하다는 점에 유의하는 것이 중요합니다. 향후 게시물에서는 Triton을 통합하고 Lambda Labs 와 같은 보다 비용 효율적인 GPU 클라우드 공급자를 활용하는 방법에 대한 자세한 가이드를 제공하겠습니다.

마지막 생각들

mosaicML의 MPT-7B는 OpenAI의 ChatGPT에 대한 실행 가능한 대안을 제공하지만 자체적인 과제도 제시합니다. 모델을 실행하는 데 시간과 비용이 많이 들고, 사용 가능한 문서도 부족합니다. 그러나 모델을 내부에 유지하고 데이터가 OpenAI에 노출되지 않도록 보호하는 기능은 특정 사용 사례에서 매력적일 수 있습니다.


SageMaker는 모델을 신속하게 테스트할 수 있는 뛰어난 편의성을 제공하고 준비가 되면 프로덕션으로 전환할 수 있는 유연성을 제공합니다. MPT-7B를 이제 막 시작했거나 한동안 사용해 왔든 이 가이드가 귀중한 통찰력을 제공했기를 바랍니다.


MPT-7B, MPT-30B, Falcon-40b 및 ChatGPT 간의 성능 비교에 대해 자세히 알아보는 다음 블로그 게시물을 계속 지켜봐 주시기 바랍니다.


MPT-7B 또는 더 큰 변형인 MPT-30B 에 대해 자세히 알아보려면 다음 링크를 참조하세요.


그리고 ChatGPT를 사용하든 MPT-7B를 사용하든 중요한 것은 데이터 개인 정보 보호 및 비용 효율성을 손상시키지 않고 사용 사례를 제공하는 것입니다. 즐겁게 땜질하세요!

데이터에 MPT 또는 ChatGPT를 사용하기 위한 턴키 솔루션을 원하십니까?

MindfulDataAI.com 에서는 기업용 ChatGPT를 제공합니다. 회사 데이터에 ChatGPT, MPT 또는 기타 모델을 활용하는 데 관심이 있으시면 당사에 문의해 주세요.