MPT-7B, 상업적으로 사용 가능한 언어 모델의 시대가 왔다

May 10 2023
오픈 소스 LLM 소개 및 개발 가이드 — MPT-7B Overall Mosaic은 AI 모델 전문 스타트업 회사로, 이 기사에서는 새로 출시된 MPT-7B 모델 시리즈를 소개합니다. 완전히 오픈 소스이며 상업적으로 사용 가능한 모델이며 9에서 교육을 받았습니다.

오픈 소스 LLM 소개 및 개발 가이드 — MPT-7B

Midjourney에서 생성한 이미지

전반적인

Mosaic은 AI 모델 전문 스타트업 기업으로 이번 글에서는 새롭게 출시된 MPT-7B 모델 시리즈를 소개합니다. 그것들은 완전히 오픈 소스이고 상업적으로 이용 가능한 모델이며, 1조 개의 토큰에 대해 처음부터 9.5일 만에 훈련되었습니다. 이 모델의 개발 프로세스는 제가 이전 기사에서 소개한 LLaMA 또는 Pythia에서 미세 조정된 모델보다 훨씬 더 복잡하고 비용이 많이 듭니다. 특히 200,000 USD 하드웨어 비용으로 최대 1조 개의 토큰을 교육했다는 점을 고려하면 스타트업으로서는 놀라운 성과입니다. 기본 모델의 기능은 70억 LLaMA 모델과 동일하며 Instruct 모델, Chat 모델 및 StoryWriter 모델을 포함하여 개발 커뮤니티에 영감을 주기 위해 다른 모델도 미세 조정했습니다.

MPT-7B 모델은 Mosaic의 평가 테스트에서 LLaMA-7B 모델과 동등한 성능을 가진 최초의 오픈 소스 언어 모델이며, 지금까지 Pythia 및 StableLM 및 기타 여러 오픈 소스 모델보다 품질이 우수하고 안정적으로 보입니다. 결과 및 훈련 척도. RedPajama 및 OpenLLaMA와 같은 다른 모델은 아직 완전히 출시되지 않은 현재 교육 모델의 스냅샷일 뿐입니다. 이것은 전체 모델인 곳에서 실제로 받은 첫 번째 모델이며 기본적으로 LLaMA와 동등하다는 것을 보여주기 위해 벤치마킹되었습니다. MPT-7B 모델은 최초의 상용화 모델이기도 하며, 상용화를 위해 자체 데이터로 자체 미세 조정이 가능합니다.

학업 과제에서 MPT-7B 대 LLaMA-7B 대 다른 오픈 소스 모델의 제로 샷 정확도(모자이크에서).

StoryWriter 모델의 컨텍스트 길이

MPT-7B 모델의 가장 멋진 점 중 하나는 ALiBiMPT-7B-StoryWriter-65k+ 아키텍처 로 훈련된 Story-Writer 모델을 제공하여 사용자가 컨텍스트를 매우 긴 길이로 확장할 수 있다는 것입니다. 더 긴 모델을 미세 조정하고 싶다면 지금 할 수 있습니다. 이것이 바로 Story-Writer 모델에서 수행한 작업입니다. 여기서 기본 모델을 가져와 65,000개 이상의 토큰 컨텍스트 길이로 미세 조정했습니다. 원래 LLaMA 모델은 2048개의 토큰만 허용하고 StableLM은 4,096개의 토큰에 대해 훈련되었으며 ChatGPT 및 GPT-4의 경우 액세스할 수 있는 버전에 따라 숫자는 4,096 및 8,000-32,000입니다.

65+K-토큰 입력 기능은 모델 중에서 MPT를 훨씬 더 인상적으로 만듭니다.

Mosaic 팀이 한때 The Great Gatsby 의 전체 책을 촉발 한 후 모델이 67873 토큰 입력을 기반으로 적절한 에필로그를 성공적으로 생성했음을 보여주는 인상적인 예가 블로그 에 있습니다 . 나는 그렇게 할 수 있는 다른 폐쇄형 모델이나 개방형 모델을 본 적이 없으므로 OpenAI 또는 Story-Writer 모델의 임베딩 또는 향후 상황 내 학습을 수행하는 데 더 비용 효율적인 방법을 고려하게 됩니다. 상황에 맞는 학습에 관심이 있으시면 이전 기사를 참조하십시오.

교육용 데이터 세트

그들은 또한 70억 개의 지시 모델을 훈련시켰는데 MPT-7B-Instruct, 이것은 짧은 형식의 지시 따르기 모델입니다. 주로 Databricks의 Dolly-15K 데이터 세트를 보강하여 오픈 소스 데이터 세트의 기본 모드에서 미세 조정됩니다. 결과적으로 그들은 더 큰 지침 기반 데이터 세트를 얻고 상업적으로 사용 가능한 라이센스를 유지합니다. 기사 에서 언급했듯이Dolly 2.0에서 Dolly의 상업적 유용성을 가능하게 하는 핵심 요소는 ChatGPT와 같은 다른 AI 모델에서 생성되지 않고 인간이 생성한 순수한 라이선스가 필요 없는 데이터 세트입니다. 그렇기 때문에 가지고 놀면서 질문을 하면 "AI 언어 모델로서, 난 할 수 없어..." 같은 친숙한 대답을 얻지 못합니다. 그러나 Vicuna 모델과 Koala 모델이 사용하는 데이터 세트만큼 크지 않으며 팀은 이 교육 모델의 경쟁력을 높이기 위해 1T 데이터 세트로 교육을 확장할 계획입니다.

JSON 변환 작업에 대한 Instruct 모델의 예

기타

MPT-7B-Chat 또한 사용자에게 원활하고 매력적인 다중 회전 상호 작용을 제공하기 위해 호출되는 또 다른 광범위한 MPT-7B 모델이 있습니다 . 이 챗봇 모델은 상업적 사용이 허용되지 않는 유일한 모델입니다.

또한 MPT-7B 모델의 최적화 계층에는 HuggingFace 허브에서 " 1.5x-2x 더 빠른 " 에 대해 다른 70억 모델보다 더 빠른 추론 속도의 이유 중 하나인 FlashAttention 및 낮은 정밀도 layernorm이 포함되어 있습니다.

다음은 학습할 수 있는 MPT-7B 모델의 리소스입니다.

  • 블로그 게시물:https://www.mosaicml.com/blog/mpt-7b
  • 데모 지시:https://huggingface.co/spaces/mosaicml/mpt-7b-instruct
  • 채팅 데모:https://huggingface.co/spaces/mosaicml/mpt-7b-chat

모델은 상업적 사용에 매우 적합하지만 쉽고 저렴한 배포는 모델의 또 다른 중요한 특성 중 하나여야 합니다. PreTrainedModel다행스럽게도 MPT-7B는 HuggingFace 기본 클래스 와의 원활한 호환성 덕분에 추론 작업을 위해 빠르고 간단하며 저렴하게 배포할 수 있도록 설계되었습니다 .

MPT-7B-Instruct 모델을 로컬에서 배포하고 실행하려는 경우 참조할 Google Colab 노트북을 만들었습니다. https://colab.research.google.com/drive/16D9tjggLukD38Un0hC-Gss3mrehPXng_?usp=sharing

마음대로 공간에 복사해도 되지만, 이 모델을 실행하려면 Colab Pro 계정이 있거나 로컬 GPU 지원이 있어야 사전 학습된 리소스에 최소 T4 15GB GPU 및 22GB RAM이 필요한 적절한 리소스가 있을 수 있습니다 MPT-7B-Instruct.

노트북의 코드를 살펴보겠습니다.

a) 패키지 설치

!pip install requests torch transformers einops

from typing import Any, Dict, Tuple
import warnings
import datetime
import os
from threading import Event, Thread
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, StoppingCriteria, StoppingCriteriaList, TextIteratorStreamer

import textwrap

INSTRUCTION_KEY = "### Instruction:"
RESPONSE_KEY = "### Response:"
END_KEY = "### End"
INTRO_BLURB = "Below is an instruction that describes a task. Write a response that appropriately completes the request."
PROMPT_FOR_GENERATION_FORMAT = """{intro}
{instruction_key}
{instruction}
{response_key}
""".format(
    intro=INTRO_BLURB,
    instruction_key=INSTRUCTION_KEY,
    instruction="{instruction}",
    response_key=RESPONSE_KEY,
)


class InstructionTextGenerationPipeline:
...

INSTRUCTION_KEY, RESPONSE_KEY및은 END_KEY프롬프트의 특정 섹션을 식별하는 키로 사용됩니다. INTRO_BLURB프롬프트에 대한 몇 가지 소개 텍스트를 제공하는 문자열입니다. PROMPT_FOR_GENERATION_FORMAT언어 모델에 전달되는 프롬프트의 형식을 정의하는 문자열입니다.

명명된 클래스는 InstructionTextGenerationPipeline미리 훈련된 변환기 언어 모델을 사용하여 명령이 주어진 텍스트를 생성하도록 정의됩니다. 이 클래스는 transformers라이브러리를 사용하여 사전 훈련된 모델 및 토크나이저를 로드하고 __call__명령 문자열을 입력으로 사용하고 언어 모델을 사용하여 응답 문자열을 생성하는 메서드를 정의합니다.

d) 파이프라인으로 모델 로드

generate = InstructionTextGenerationPipeline(
    "mosaicml/mpt-7b-instruct",
    torch_dtype=torch.bfloat16,
    trust_remote_code=True,
)
stop_token_ids = generate.tokenizer.convert_tokens_to_ids(["<|endoftext|>"])

# Define a custom stopping criteria
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

def process_stream(instruction, temperature, top_p, top_k, max_new_tokens):
    # Tokenize the input
    input_ids = generate.tokenizer(
        generate.format_instruction(instruction), return_tensors="pt"
    ).input_ids
    input_ids = input_ids.to(generate.model.device)

    # Initialize the streamer and stopping criteria
    streamer = TextIteratorStreamer(
        generate.tokenizer, timeout=10.0, skip_prompt=True, skip_special_tokens=True
    )
    stop = StopOnTokens()

    if temperature < 0.1:
        temperature = 0.0
        do_sample = False
    else:
        do_sample = True

    gkw = {
        **generate.generate_kwargs,
        **{
            "input_ids": input_ids,
            "max_new_tokens": max_new_tokens,
            "temperature": temperature,
            "do_sample": do_sample,
            "top_p": top_p,
            "top_k": top_k,
            "streamer": streamer,
            "stopping_criteria": StoppingCriteriaList([stop]),
        },
    }

    response = ''

    def generate_and_signal_complete():
        generate.model.generate(**gkw)

    t1 = Thread(target=generate_and_signal_complete)
    t1.start()

    for new_text in streamer:
        response += new_text
   
    return response

이제 process_stream() 적절한 인수를 사용하여 메서드를 호출하여 모델이 지침에 어떻게 응답하는지 확인할 수 있습니다.

instruction = "Write a travel blog about a 3-day trip to The Philippines. You need describe day by day."
temperature = 0.3
top_p = 0.95
top_k = 0
max_new_tokens = 2000
response = process_stream(instruction, temperature, top_p, top_k, max_new_tokens)

wrapped_text = textwrap.fill(response, width=100)
print(wrapped_text +'\n\n')

MPT-7B-Instruct의 응답

Colab 또는 로컬 머신이 모델을 성공적으로 배포하고 코드의 매개변수를 조정하여 관점에 따라 다른 동작을 확인하면 모델에 대해 훨씬 더 많은 지침을 시도할 수 있습니다. 지금까지의 내 테스트에서 텍스트 및 코드 완성은 충분하지만 추론과 수학은 아직 상업적 교육 작업을 실행하기에는 성숙하지 않았습니다. Mosaic의 공식 블로그에서 우리는 그들이 이러한 미세 조정된 모델에 더 많은 훈련 데이터를 넣으려고 노력하고 있음을 알고 있습니다.

MPT-7B의 기본 모델, 미세 조정, 데이터 세트, 교육 및 추론은 모두 오픈 소스이며 상업적이지 않으므로 이제 저렴한 비용으로 AI 비즈니스를 위한 자체 비공개 모델을 교육하고 출시하는 것을 고려할 수 있습니다.

그게 다야.

이 기사에서 유용한 정보를 찾을 수 있기를 바라며 읽어 주셔서 감사합니다!

레벨업 코딩

우리 커뮤니티의 일원이 되어 주셔서 감사합니다! 가기 전에:

  • 이야기에 박수치고 작가 팔로우
  • 레벨업 코딩 출판물 에서 더 많은 콘텐츠 보기
  • 무료 코딩 면접 과정 ⇒ 과정 보기
  • 팔로우: 트위터 | 링크드인 | 뉴스 레터