MPT-7B, व्यावसायिक रूप से उपयोग करने योग्य भाषा मॉडल का समय आ गया है
ओपन-सोर्स एलएलएम - एमपीटी-7बी के लिए एक परिचय और विकास गाइड
कुल मिलाकर
मोज़ेक एक स्टार्टअप कंपनी है जो एआई मॉडल में विशेषज्ञता रखती है, और इस लेख में, हम उनकी नई रिलीज़ की गई एमपीटी-7बी मॉडल श्रृंखला पेश करेंगे। वे पूरी तरह से ओपन-सोर्स और व्यावसायिक रूप से उपलब्ध मॉडल हैं, जिन्हें 9.5 दिनों में 1 ट्रिलियन टोकन पर स्क्रैच से प्रशिक्षित किया गया है, जिनकी विकास प्रक्रिया उन मॉडलों की तुलना में बहुत अधिक जटिल और महंगी है, जिन्हें मैंने अपने पिछले लेखों में पेश किया था। स्टार्टअप के लिए यह एक उल्लेखनीय उपलब्धि है, विशेष रूप से यह देखते हुए कि उन्होंने 200K यूएसडी हार्डवेयर लागत पर ट्रिलियन टोकन तक प्रशिक्षित किया है। बेस मॉडल की क्षमता 7-बिलियन LLaMA मॉडल के बराबर है, इसके अलावा, उन्होंने विकासशील समुदायों को प्रेरित करने के लिए अन्य मॉडलों को भी फाइन-ट्यून किया है, जिसमें इंस्ट्रक्शन मॉडल, चैट मॉडल और स्टोरीराइटर मॉडल शामिल हैं।
MPT-7B मॉडल मोज़ेक के मूल्यांकन परीक्षणों में LLaMA-7B मॉडल के समकक्ष प्रदर्शन वाला पहला ओपन-सोर्स भाषा मॉडल है, और यह पायथिया और StableLM और अब तक के कई अन्य ओपन-सोर्स मॉडल की तुलना में उच्च गुणवत्ता और अधिक स्थिर दिखता है। परिणाम और प्रशिक्षण तराजू। अन्य मॉडल, जैसे कि RedPajama और OpenLLaMA, वर्तमान प्रशिक्षण मॉडल के केवल स्नैपशॉट हैं जो अभी तक पूरी तरह से जारी नहीं किए गए हैं। यह पहला मॉडल है जिसे हमने वास्तव में प्राप्त किया है जहां यह पूर्ण मॉडल है और यह दिखाने के लिए बेंचमार्क किया गया है कि यह मूल रूप से LLaMA के बराबर है। MPT-7B मॉडल व्यावसायिक रूप से उपलब्ध पहला मॉडल भी है, और हम व्यावसायिक उपयोग के लिए इसे अपने डेटा पर स्वयं ठीक कर सकते हैं।
स्टोरीराइटर मॉडल की प्रसंग लंबाई
MPT-7B मॉडल के बारे में सबसे अच्छी चीजों में से एक यह है कि इसने स्टोरी-राइटर मॉडल प्रदान किया है MPT-7B-StoryWriter-65k+
, जिसे ALiBi आर्किटेक्चर के साथ प्रशिक्षित किया गया था, जिससे उपयोगकर्ता संदर्भ को इतनी अधिक लंबाई तक बढ़ा सकते हैं। अगर आप किसी लंबे मॉडल को फ़ाइन-ट्यून करना चाहते हैं, तो आप आज ऐसा कर सकते हैं। यही उन्होंने स्टोरी-राइटर मॉडल के साथ किया है, जहां उन्होंने बेस मॉडल लिया है और इसे 65,000+ टोकन की संदर्भ लंबाई के साथ ठीक किया है। इसे परिप्रेक्ष्य में रखने के लिए, मूल LLaMA मॉडल केवल 2048 टोकन स्वीकार करता है, StableLM को 4,096 टोकन के लिए प्रशिक्षित किया गया था, और ChatGPT और GPT-4 के लिए, संख्या 4,096 और 8,000-32,000 है, जो इस बात पर निर्भर करता है कि आपके पास किस संस्करण तक पहुंच है।
इसके ब्लॉग पर एक प्रभावशाली उदाहरण है जो दिखा रहा है कि मोज़ेक टीम ने एक बार द ग्रेट गैट्सबी की पूरी किताब को प्रेरित किया , फिर मॉडल ने 67873 टोकन इनपुट के आधार पर सफलतापूर्वक एक अच्छा उपसंहार तैयार किया। मैंने ऐसा करने में सक्षम किसी अन्य करीबी मॉडल या खुले मॉडल को कभी नहीं देखा है, जिससे मुझे यह विचार करना पड़े कि भविष्य में संदर्भ में सीखने के लिए कौन सी विधि अधिक लागत प्रभावी है, OpenAI या स्टोरी-राइटर मॉडल की एम्बेडिंग। यदि आप इन-कॉन्टेक्स्ट लर्निंग में रुचि रखते हैं, तो कृपया मेरे पिछले लेख को देखें।
प्रशिक्षण के लिए डेटासेट
उन्होंने एक 7 बिलियन इंस्ट्रक्शन मॉडल को भी प्रशिक्षित किया है MPT-7B-Instruct
, जो एक शॉर्ट-फॉर्म इंस्ट्रक्शन-फॉलोइंग मॉडल है। यह मुख्य रूप से डाटाब्रिक्स के डॉली-15के डाटासेट के संवर्द्धन से ओपन-सोर्स डेटासेट पर बेस मोड से फाइन-ट्यून किया गया है। नतीजतन, वे एक बड़ा निर्देश-आधारित डेटासेट प्राप्त करते हैं और एक व्यावसायिक-प्रयोग करने योग्य लाइसेंस रखते हैं। जैसा कि मैंने लेख में उल्लेख किया हैडॉली 2.0 पर, डॉली की व्यावसायिक उपयोगिता का प्रमुख प्रवर्तक इसका शुद्ध लाइसेंस-मुक्त डेटासेट है, जो चैटजीपीटी जैसे अन्य एआई मॉडल से उत्पन्न नहीं होता है, बल्कि मनुष्यों द्वारा बनाया जाता है। उसके कारण, जब आप इसके साथ खेलते हैं और इससे प्रश्न पूछते हैं, तो आपको "AI भाषा मॉडल के रूप में, मैं नहीं कर सकता ..." जैसे परिचित उत्तर नहीं मिलते हैं। हालाँकि, यह उतना बड़ा डेटासेट नहीं है जितना कि विकुना मॉडल और कोआला मॉडल उपयोग कर रहे हैं और टीम इस निर्देश मॉडल के अधिक प्रतिस्पर्धी के लिए अपने प्रशिक्षण को 1T डेटासेट तक विस्तारित करने की योजना बना रही है।
अन्य
एमपीटी-7बी का एक अन्य व्यापक मॉडल भी है जिसे MPT-7B-Chat
उपयोगकर्ताओं के लिए सहज, आकर्षक मल्टी-टर्न इंटरैक्शन प्रदान करने के लिए कहा जाता है। कृपया ध्यान दें कि यह चैटबॉट मॉडल एकमात्र ऐसा है जिसे व्यावसायिक उपयोग की अनुमति नहीं है।
इसके अलावा, MPT-7B मॉडल की ऑप्टिमाइज़ेशन लेयर में FlashAttention और कम सटीक लेयरनॉर्म शामिल हैं, जो अन्य 7-बिलियन मॉडल की तुलना में हगिंगफेस हब पर " 1.5x-2x तेज " की तुलना में तेज अनुमान गति का हिस्सा हैं।
यहाँ 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 को हगिंगफेस बेस क्लास के साथ सहज अनुकूलता के लिए धन्यवाद, अनुमान कार्यों के लिए तैनात करने के लिए तेज, सरल और सस्ती होने के लिए इंजीनियर किया गया है।
यदि आप MPT-7B-निर्देश मॉडल को स्थानीय रूप से परिनियोजित और चलाना चाहते हैं, तो इसका संदर्भ देने के लिए मैंने आपके लिए एक Google Colab नोटबुक बनाई है: 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__
विधि को परिभाषित करती है जो एक निर्देश स्ट्रिंग को इनपुट के रूप में लेती है और भाषा मॉडल का उपयोग करके एक प्रतिक्रिया स्ट्रिंग उत्पन्न करती है।
डी) पाइपलाइन के साथ लोड मॉडल
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')
जब आपकी Colab या स्थानीय मशीन सफलतापूर्वक मॉडल को डिप्लॉय कर लेती है, और आपके दृष्टिकोण के अनुसार अलग-अलग व्यवहार देखने के लिए कोड में पैरामीटर एडजस्ट कर लेती है, तो आप मॉडल के लिए और अधिक निर्देश देने की कोशिश कर सकते हैं। मेरे अब तक के परीक्षणों से, पाठ और कोड पूरा करना काफी अच्छा है लेकिन तर्क और गणित अभी तक किसी व्यावसायिक निर्देश कार्य को चलाने के लिए परिपक्व नहीं हुए हैं। मोज़ेक के आधिकारिक ब्लॉग से, हम जानते हैं कि वे इन परिष्कृत मॉडलों में अधिक प्रशिक्षण डेटा डालने का प्रयास कर रहे हैं।
MPT-7B का बेस मॉडल, फाइन-ट्यूनिंग, डेटासेट, प्रशिक्षण, और अनुमान सभी ओपन-सोर्स और कमर्शियल-फ्री हैं, इसलिए अब आप अपने एआई बिजनेस के लिए एक किफायती कीमत पर प्रशिक्षण और अपने निजी मॉडल को जारी करने पर विचार करना शुरू कर सकते हैं।
इतना ही।
आशा है कि आप इस लेख में कुछ उपयोगी पा सकते हैं और पढ़ने के लिए धन्यवाद!
लेवल अप कोडिंग
हमारे समुदाय का हिस्सा बनने के लिए धन्यवाद! इससे पहले कि तुम जाओ:
- कहानी के लिए ताली बजाएं और लेखक को फॉलो करें
- लेवल अप कोडिंग प्रकाशन में अधिक सामग्री देखें
- फ्री कोडिंग इंटरव्यू कोर्स ⇒ कोर्स देखें
- हमें फॉलो करें: ट्विटर | लिंक्डइन | समाचार पत्रिका