MPT-7B เวลาของโมเดลภาษาที่ใช้ในเชิงพาณิชย์ได้มาถึงแล้ว

May 10 2023
คู่มือแนะนำและการพัฒนาสำหรับ LLM แบบโอเพ่นซอร์ส — MPT-7B Overall Mosaic เป็นบริษัทสตาร์ทอัพที่เชี่ยวชาญด้านโมเดล AI และในบทความนี้ เราจะแนะนำซีรีส์โมเดล MPT-7B ที่เพิ่งเปิดตัวใหม่ เป็นโอเพ่นซอร์สเต็มรูปแบบและมีวางจำหน่ายทั่วไป ได้รับการฝึกฝนใน 9

คู่มือแนะนำและการพัฒนาสำหรับ LLM แบบโอเพ่นซอร์ส — MPT-7B

ภาพที่สร้างโดย Midjourney

โดยรวม

Mosaic เป็นบริษัทสตาร์ทอัพที่เชี่ยวชาญด้านโมเดล AI และในบทความนี้ เราจะแนะนำซีรีส์โมเดล MPT-7B ที่เพิ่งเปิดตัวใหม่ พวกมันเป็นโมเดลโอเพ่นซอร์สเต็มรูปแบบและวางจำหน่ายในเชิงพาณิชย์ ได้รับการฝึกฝนใน 9.5 วันตั้งแต่เริ่มต้นด้วยโทเค็น 1 ล้านล้านโทเค็น ซึ่งขั้นตอนการพัฒนานั้นซับซ้อนและมีค่าใช้จ่ายสูงกว่าโมเดลที่ปรับแต่งจาก LLaMA หรือ Pythia ที่ผมแนะนำในบทความก่อนหน้านี้มาก นี่เป็นความสำเร็จที่โดดเด่นสำหรับสตาร์ทอัพ โดยเฉพาะอย่างยิ่งเมื่อพิจารณาว่าพวกเขาฝึกฝนโทเค็นมากถึงล้านล้านโทเค็นในราคาฮาร์ดแวร์ 200,000 ดอลลาร์สหรัฐฯ ความสามารถของโมเดลพื้นฐานเทียบเท่ากับโมเดล LLaMA จำนวน 7 พันล้านโมเดล นอกจากนั้น พวกเขายังได้ปรับแต่งโมเดลอื่นๆ เพื่อสร้างแรงบันดาลใจให้กับชุมชนการพัฒนา ซึ่งรวมถึงโมเดล Instruct โมเดล Chat และโมเดล StoryWriter

โมเดล MPT-7B เป็นโมเดลภาษาโอเพ่นซอร์สรุ่นแรกที่มีประสิทธิภาพเทียบเท่ากับโมเดล LLaMA-7B ในการทดสอบประเมินของ Mosaic และดูมีคุณภาพสูงกว่าและเสถียรกว่า Pythia และ StableLM และโมเดลโอเพ่นซอร์สอื่นๆ อีกมากมายจนถึงตอนนี้ อ้างอิงจาก ผลลัพธ์และมาตราส่วนการฝึกอบรม โมเดลอื่นๆ เช่น โมเดลจาก RedPajama และ OpenLLaMA เป็นเพียงสแนปช็อตของโมเดลการฝึกอบรมปัจจุบันซึ่งยังไม่ได้รับการเผยแพร่อย่างสมบูรณ์ นี่เป็นรุ่นแรกที่เราได้รับจริงโดยเป็นแบบจำลองเต็มรูปแบบและได้รับการวัดประสิทธิภาพเพื่อแสดงให้เห็นว่าโดยพื้นฐานแล้วเทียบเท่ากับ LLaMA รุ่น MPT-7B ยังเป็นรุ่นแรกที่มีจำหน่ายในเชิงพาณิชย์ และเราสามารถปรับแต่งได้เองโดยใช้ข้อมูลของเราเองสำหรับการใช้งานเชิงพาณิชย์

ความแม่นยำแบบ Zero-shot ของ MPT-7B เทียบกับ LLaMA-7B เทียบกับรุ่นโอเพ่นซอร์สอื่นๆ ในงานวิชาการ (จาก Mosaic)

ความยาวบริบทของโมเดล StoryWriter

สิ่งที่ยอดเยี่ยมที่สุดอย่างหนึ่งเกี่ยวกับโมเดล MPT-7B คือมีโมเดล Story-Writer MPT-7B-StoryWriter-65k+ซึ่งได้รับการฝึกฝนด้วย สถาปัตยกรรม ALiBiทำให้ผู้ใช้สามารถขยายบริบทให้ยาวที่สุดได้ หากคุณต้องการปรับแต่งโมเดลให้ยาวขึ้น คุณสามารถทำได้ในวันนี้ นี่คือสิ่งที่พวกเขาทำกับโมเดล 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 หากคุณสนใจการเรียนรู้ในบริบท โปรดดูบทความก่อนหน้าของฉัน

ชุดข้อมูลสำหรับการฝึกอบรม

พวกเขายังได้ฝึกฝนโมเดลคำสั่ง 7 พันล้านรูปแบบMPT-7B-Instructซึ่งเป็นโมเดลตามคำสั่งแบบสั้น ได้รับการปรับแต่งอย่างละเอียดจากโหมดพื้นฐานบนชุดข้อมูลโอเพ่นซอร์ส โดยส่วนใหญ่มาจากการเสริมชุดข้อมูล Dolly-15K ของ Databricks เป็นผลให้พวกเขาได้รับชุดข้อมูลตามคำแนะนำที่ใหญ่ขึ้นและเก็บสิทธิ์การใช้งานเชิงพาณิชย์ ดังที่ฉันได้กล่าวไว้ในบทความบน Dolly 2.0 ตัวเปิดใช้งานหลักของความสามารถในการใช้งานเชิงพาณิชย์ของ Dolly คือชุดข้อมูลที่ปราศจากใบอนุญาตซึ่งไม่ได้สร้างจากโมเดล AI อื่น ๆ เช่น ChatGPT แต่สร้างขึ้นโดยมนุษย์ ด้วยเหตุนี้ เมื่อคุณเล่นกับมันและถามคำถาม คุณจะไม่ได้รับคำตอบที่คุ้นเคย เช่น “ในฐานะโมเดลภาษา AI ฉันไม่สามารถ…” อะไรทำนองนั้น อย่างไรก็ตาม ชุดข้อมูลนี้ไม่ได้ใหญ่เท่ากับโมเดล Vicuna และโมเดล Koala ที่ใช้อยู่ และทีมกำลังวางแผนที่จะขยายการฝึกอบรมไปยังชุดข้อมูล 1T เพื่อให้โมเดลคำสั่งนี้แข่งขันได้มากขึ้น

ตัวอย่างของ Instruct model ในงานการแปลง JSON

คนอื่น

นอกจากนี้ยังมี MPT-7B อีกรุ่นหนึ่งที่ครอบคลุมMPT-7B-Chat เพื่อให้การโต้ตอบแบบหลายเลี้ยวที่ราบรื่นและมีส่วนร่วมสำหรับผู้ใช้ โปรดทราบว่า Chatbot รุ่นนี้เป็นรุ่นเดียวที่ไม่ได้รับอนุญาตให้ใช้ในเชิงพาณิชย์

ยิ่งไปกว่านั้น เลเยอร์การปรับให้เหมาะสมของรุ่น MPT-7B ยังรวมถึงFlashAttentionและเลเยอร์นอร์มที่มีความแม่นยำต่ำ ซึ่งเป็นส่วนหนึ่งของเหตุผลสำหรับความเร็วในการอนุมานที่เร็วกว่ารุ่นอื่น ๆ ที่มี 7 พันล้านเครื่องโดย " เร็วกว่า 1.5x-2x " บนฮับ HuggingFace

นี่คือแหล่งข้อมูลของรุ่น 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

แม้ว่าโมเดลจะเหมาะสำหรับการใช้งานเชิงพาณิชย์ แต่การปรับใช้ที่ง่ายและราคาถูกควรเป็นหนึ่งในคุณสมบัติที่สำคัญของมัน โชคดีที่ MPT-7B ได้รับการออกแบบทางวิศวกรรมให้มีความรวดเร็ว เรียบง่าย และราคาย่อมเยาสำหรับการปรับใช้สำหรับงานอนุมาน ด้วยความเข้ากันได้อย่างราบรื่นกับคลาสPreTrainedModelพื้นฐาน HuggingFace

ฉันสร้างสมุดบันทึก Google Colab เพื่อให้คุณอ้างถึง หากคุณต้องการปรับใช้และเรียกใช้โมเดล MPT-7B-Instruct ในเครื่อง: https://colab.research.google.com/drive/16D9tjggLukD38Un0hC-Gss3mrehPXng_?usp=sharing

โปรดอย่าลังเลที่จะคัดลอกไปยังพื้นที่ของคุณ แต่โปรดทราบว่าในการเรียกใช้โมเดลนี้ คุณอาจมีบัญชี Colab Pro หรือการสนับสนุน GPU ในเครื่องเพื่อให้มีทรัพยากรที่เหมาะสมซึ่งจำเป็นต้องมี T4 15GB GPU และ 22GB RAM เป็นอย่างMPT-7B-Instructต่ำ

มาดูรหัสในสมุดบันทึกกัน

ก) ติดตั้งแพ็คเกจ

!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 ของคุณด้วยต้นทุนที่ไม่แพง

แค่นั้นแหละ.

หวังว่าคุณจะพบสิ่งที่เป็นประโยชน์ในบทความนี้และขอขอบคุณสำหรับการอ่าน!

เพิ่มระดับการเข้ารหัส

ขอบคุณที่เป็นส่วนหนึ่งของชุมชนของเรา! ก่อนที่คุณจะไป:

  • ปรบมือให้กับเรื่องราวและติดตามผู้เขียน
  • ดูเนื้อหาเพิ่มเติมในสิ่งพิมพ์ Level Up Coding
  • หลักสูตรสัมภาษณ์การเข้ารหัสฟรี ⇒ ดูหลักสูตร
  • ติดตามเรา: Twitter | LinkedIn | จดหมายข่าว