ایمیزون سیج میکر جمپ اسٹارٹ پر فائن ٹیون کوڈ لاما | ایمیزون ویب سروسز

ایمیزون سیج میکر جمپ اسٹارٹ پر فائن ٹیون کوڈ لاما | ایمیزون ویب سروسز

آج، ہم میٹا کے ذریعے کوڈ لاما ماڈلز کو ٹھیک کرنے کی صلاحیت کا اعلان کرتے ہوئے پرجوش ہیں۔ ایمیزون سیج میکر جمپ اسٹارٹ. کوڈ لاما فیملی آف لارج لینگوئج ماڈلز (LLMs) پہلے سے تربیت یافتہ اور ٹھیک ٹیونڈ کوڈ جنریشن ماڈلز کا ایک مجموعہ ہے جس کے پیمانے 7 بلین سے 70 بلین پیرامیٹر ہیں۔ فائن ٹیونڈ کوڈ لاما ماڈلز بنیادی کوڈ لاما ماڈلز کے مقابلے میں بہتر درستگی اور وضاحت کی اہلیت فراہم کرتے ہیں، جیسا کہ اس کے خلاف ٹیسٹنگ پر ظاہر ہوتا ہے۔ ہیومن ایول اور MBPP ڈیٹاسیٹس۔ آپ سیج میکر جمپ سٹارٹ کا استعمال کرتے ہوئے کوڈ لاما ماڈلز کو ٹھیک اور تعینات کر سکتے ہیں۔ ایمیزون سیج میکر اسٹوڈیو کچھ کلکس کے ساتھ یا SageMaker Python SDK کا استعمال کرتے ہوئے UI۔ لاما ماڈلز کی فائن ٹیوننگ میں فراہم کردہ اسکرپٹ پر مبنی ہے۔ لاما کی ترکیبیں گٹ ہب ریپو میٹا سے PyTorch FSDP، PEFT/LoRA، اور Int8 کوانٹائزیشن تکنیک کا استعمال کرتے ہوئے۔

اس پوسٹ میں، ہم درج ذیل میں دستیاب ایک کلک UI اور SDK کے تجربے کے ذریعے SageMaker JumpStart کے ذریعے کوڈ لاما کے پہلے سے تربیت یافتہ ماڈلز کو ٹھیک کرنے کے طریقہ پر چلتے ہیں۔ GitHub ذخیرہ.

سیج میکر جمپ اسٹارٹ کیا ہے؟

SageMaker JumpStart کے ساتھ، مشین لرننگ (ML) پریکٹیشنرز عوامی طور پر دستیاب فاؤنڈیشن ماڈلز کے وسیع انتخاب میں سے انتخاب کر سکتے ہیں۔ ایم ایل پریکٹیشنرز فاؤنڈیشن ماڈلز کو وقف کر سکتے ہیں۔ ایمیزون سیج میکر نیٹ ورک الگ تھلگ ماحول سے مثالیں اور ماڈل ٹریننگ اور تعیناتی کے لیے SageMaker کا استعمال کرتے ہوئے ماڈلز کو اپنی مرضی کے مطابق بنائیں۔

کوڈ لاما کیا ہے؟

کوڈ لاما کا کوڈ سے خصوصی ورژن ہے۔ شعلہ 2 جو Llama 2 کو اس کے کوڈ سے متعلق ڈیٹا سیٹس پر مزید تربیت دے کر اور اسی ڈیٹاسیٹ سے زیادہ ڈیٹا کے نمونے لے کر بنایا گیا تھا۔ کوڈ لاما میں کوڈنگ کی بہتر صلاحیتوں کی خصوصیات ہیں۔ یہ کوڈ کے بارے میں کوڈ اور فطری زبان دونوں کوڈ اور قدرتی زبان کے اشارے سے تیار کر سکتا ہے (مثال کے طور پر، "مجھے ایک فنکشن لکھیں جو فبونیکی ترتیب کو آؤٹ پٹ کرے")۔ آپ اسے کوڈ کی تکمیل اور ڈیبگنگ کے لیے بھی استعمال کر سکتے ہیں۔ یہ آج استعمال ہونے والی بہت سی مشہور پروگرامنگ زبانوں کو سپورٹ کرتا ہے، بشمول Python، C++، Java، PHP، Typescript (JavaScript)، C#، Bash، اور بہت کچھ۔

کیوں فائن ٹیون کوڈ لاما ماڈلز

میٹا نے کوڈ لاما پرفارمنس بینچ مارک شائع کیا۔ ہیومن ایول اور ایم بی پی پی عام کوڈنگ زبانوں جیسے ازگر، جاوا، اور جاوا اسکرپٹ کے لیے۔ HumanEval پر Code Llama Python ماڈلز کی کارکردگی نے مختلف کوڈنگ زبانوں اور کاموں میں 38B Python ماڈل پر 7% سے لے کر 57B Python ماڈلز پر 70% تک مختلف کارکردگی کا مظاہرہ کیا۔ اس کے علاوہ، ایس کیو ایل پروگرامنگ لینگویج پر فائن ٹیونڈ کوڈ لاما ماڈلز نے بہتر نتائج دکھائے ہیں، جیسا کہ ایس کیو ایل ایویلیویشن بینچ مارکس میں واضح ہے۔ یہ شائع شدہ بینچ مارکس کوڈ لاما ماڈلز کے فائن ٹیوننگ کے ممکنہ فوائد کو اجاگر کرتے ہیں، بہتر کارکردگی، تخصیص، اور مخصوص کوڈنگ ڈومینز اور کاموں کے لیے موافقت کو قابل بناتے ہیں۔

سیج میکر اسٹوڈیو UI کے ذریعے نو کوڈ فائن ٹیوننگ

سیج میکر اسٹوڈیو کا استعمال کرتے ہوئے اپنے لاما ماڈلز کو ٹھیک کرنا شروع کرنے کے لیے، درج ذیل مراحل کو مکمل کریں:

  1. سیج میکر اسٹوڈیو کنسول پر، منتخب کریں۔ جمپ اسٹارٹ نیوی گیشن پین میں.

آپ کو اوپن سورس اور ملکیتی ماڈلز سے لے کر 350 سے زیادہ ماڈلز کی فہرستیں ملیں گی۔

  1. کوڈ لاما ماڈلز تلاش کریں۔
    Fine-tune Code Llama on Amazon SageMaker JumpStart | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

اگر آپ کو کوڈ لاما ماڈلز نظر نہیں آتے ہیں، تو آپ اپنے سیج میکر اسٹوڈیو ورژن کو بند کرکے اور دوبارہ شروع کرکے اپ ڈیٹ کرسکتے ہیں۔ ورژن اپ ڈیٹس کے بارے میں مزید معلومات کے لیے، رجوع کریں۔ اسٹوڈیو ایپس کو بند کریں اور اپ ڈیٹ کریں۔. آپ منتخب کر کے ماڈل کی دوسری قسمیں بھی تلاش کر سکتے ہیں۔ تمام کوڈ جنریشن ماڈلز کو دریافت کریں۔ یا سرچ باکس میں کوڈ لاما کو تلاش کرنا۔

Fine-tune Code Llama on Amazon SageMaker JumpStart | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

سیج میکر جمپ سٹارٹ فی الحال کوڈ لاما ماڈلز کے لیے انسٹرکشن فائن ٹیوننگ کو سپورٹ کرتا ہے۔ مندرجہ ذیل اسکرین شاٹ کوڈ لاما 2 70B ماڈل کے لیے فائن ٹیوننگ صفحہ دکھاتا ہے۔

  1. کے لئے ٹریننگ ڈیٹاسیٹ کا مقام، آپ کی طرف اشارہ کر سکتے ہیں ایمیزون سادہ اسٹوریج سروس (ایمیزون S3) بالٹی جس میں فائن ٹیوننگ کے لیے ٹریننگ اور توثیق کے ڈیٹاسیٹ ہیں۔
  2. فائن ٹیوننگ کے لیے اپنی تعیناتی کنفیگریشن، ہائپر پیرامیٹر اور سیکیورٹی سیٹنگز سیٹ کریں۔
  3. میں سے انتخاب کریں ٹرین سیج میکر ایم ایل مثال پر فائن ٹیوننگ کا کام شروع کرنے کے لیے۔
    Fine-tune Code Llama on Amazon SageMaker JumpStart | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

ہم اگلے سیکشن میں انسٹرکشن فائن ٹیوننگ کے لیے تیار کرنے کے لیے ڈیٹا سیٹ فارمیٹ پر بات کرتے ہیں۔

  1. ماڈل کے ٹھیک ہونے کے بعد، آپ SageMaker JumpStart پر ماڈل صفحہ کا استعمال کرتے ہوئے اسے تعینات کر سکتے ہیں۔

فائن ٹیوننگ کے مکمل ہونے پر فائن ٹیوننگ ماڈل کو تعینات کرنے کا آپشن ظاہر ہوگا، جیسا کہ درج ذیل اسکرین شاٹ میں دکھایا گیا ہے۔

Fine-tune Code Llama on Amazon SageMaker JumpStart | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

SageMaker Python SDK کے ذریعے فائن ٹیون

اس سیکشن میں، ہم یہ ظاہر کرتے ہیں کہ کس طرح ایک انسٹرکشن فارمیٹ شدہ ڈیٹاسیٹ پر SageMaker Python SDK کا استعمال کرتے ہوئے کوڈ LIama ماڈلز کو ٹھیک کرنا ہے۔ خاص طور پر، ماڈل قدرتی لینگویج پروسیسنگ (NLP) کاموں کے ایک سیٹ کے لیے ٹھیک ہے جو ہدایات کا استعمال کرتے ہوئے بیان کیا گیا ہے۔ یہ زیرو شاٹ پرامپٹس کے ساتھ ان دیکھے کاموں کے لیے ماڈل کی کارکردگی کو بہتر بنانے میں مدد کرتا ہے۔

اپنے فائن ٹیوننگ کام کو مکمل کرنے کے لیے درج ذیل مراحل کو مکمل کریں۔ آپ مکمل فائن ٹیوننگ کوڈ سے حاصل کر سکتے ہیں۔ GitHub ذخیرہ.

سب سے پہلے، آئیے انسٹرکشن فائن ٹیوننگ کے لیے درکار ڈیٹا سیٹ فارمیٹ کو دیکھیں۔ تربیتی ڈیٹا کو JSON لائنز (.jsonl) فارمیٹ میں فارمیٹ کیا جانا چاہیے، جہاں ہر لائن ڈیٹا کے نمونے کی نمائندگی کرنے والی لغت ہے۔ تمام تربیتی ڈیٹا ایک فولڈر میں ہونا چاہیے۔ تاہم، اسے متعدد .jsonl فائلوں میں محفوظ کیا جا سکتا ہے۔ ذیل میں JSON لائنوں کی شکل میں ایک نمونہ ہے:

{
	'system_prompt': 'a chat',
	'question': 'Please focus on the efficiency of this problem and provide code in python:nYou are given two strings `s` and `t` consisting of only lowercase English letters.nnReturn _the minimum number of characters that need to be appended to the end of_ `s` _so that_ `t` _becomes a **subsequence** of_ `s`.nnA **subsequence** is a string that can be derived from another string by deleting some or no characters without changing the order of the remaining characters.nn**Example 1:**nn**Input:** s = "coaching ", t = "coding "n**Output:** 4n**Explanation:** Append the characters "ding " to the end of s so that s = "coachingding ".nNow, t is a subsequence of s ( "**co**aching**ding** ").nIt can be shown that appending any 3 characters to the end of s will never make t a subsequence.nn**Example 2:**nn**Input:** s = "abcde ", t = "a "n**Output:** 0n**Explanation:** t is already a subsequence of s ( "**a**bcde ").nn**Example 3:**nn**Input:** s = "z ", t = "abcde "n**Output:** 5n**Explanation:** Append the characters "abcde " to the end of s so that s = "zabcde ".nNow, t is a subsequence of s ( "z**abcde** ").nIt can be shown that appending any 4 characters to the end of s will never make t a subsequence.nn**Constraints:**nn* `1 <= s.length, t.length <= 105`n* `s` and `t` consist only of lowercase English letters.',
	'response': '### Explanationn The algorithm maintains two pointers, `i` and `j`, to iterate through the given strings `s` and `t`. The pointer `i` iterates through the string `s` and the pointer `j` iterates through the string `t`. While iterating through `s`, if we find a character that matches the current character in `t`, we increment the `j` pointer. This is because the matched character can be a part of the subsequence we are looking for. The iteration stops when either `i` reaches the end of `s` or `j` reaches the end of `t`.nnAt the end, we subtract the index `j` from the length of `t`. This gives us the minimum number of characters that need to be appended to the end of `s` so that `t` becomes a subsequence of `s`.nn### Pseudocode:n```nMIN-ADDITION(s, t)n s_len = LENGTH(s)n t_len = LENGTH(t)n i = 1n j = 1n WHILE i <= s_len AND j <= t_lenn IF s[i] == t[j]n j = j + 1n ENDIFn i = i + 1n ENDWHILEn RETURN t_len - j + 1nENDMIN-ADDITIONn```nn### Coden```pythonndef min_addition(s: str, t: str) -> int:n s_len = len(s)n t_len = len(t)n i, j = 0, 0n while i < s_len and j < t_len:n if s[i] == t[j]:n j += 1n i += 1n return t_len - jn```n'
}

تربیتی فولڈر میں a شامل ہوسکتا ہے۔ template.json فائل ان پٹ اور آؤٹ پٹ فارمیٹس کو بیان کرتی ہے۔ مندرجہ ذیل ایک نمونہ ٹیمپلیٹ ہے:

{
    "prompt": "{system_prompt} ### Input: {question}",
    "completion": "{response}"
}

ٹیمپلیٹ سے مماثل ہونے کے لیے، JSON لائنوں کی فائلوں میں ہر نمونہ کو شامل کرنا ضروری ہے۔ system_prompt, question، اور response کھیتوں اس مظاہرے میں، ہم استعمال کرتے ہیں۔ ڈولفن کوڈر ڈیٹاسیٹ گلے ملنے والے چہرے سے۔

ڈیٹا سیٹ تیار کرنے اور اسے S3 بالٹی پر اپ لوڈ کرنے کے بعد، آپ درج ذیل کوڈ کا استعمال کرتے ہوئے فائن ٹیوننگ شروع کر سکتے ہیں۔

from sagemaker.jumpstart.estimator import JumpStartEstimator

model_id = "meta-textgeneration-llama-codellama-7b" 
model_version = "*"
train_data_location = f"s3://{your_own_bucket_hosting_training_data}/" # training data in s3 bucket

estimator = JumpStartEstimator(
    model_id=model_id,
    model_version=model_version,
    hyperparameters= hyperparameters,
    environment={
        "accept_eula": "false"
    },  # please change `accept_eula` to be `true` to accept EULA.
)

estimator.fit({"training": train_data_location})

جیسا کہ درج ذیل کوڈ میں دکھایا گیا ہے، آپ براہ راست تخمینہ لگانے والے سے ٹھیک ٹیونڈ ماڈل کو تعینات کر سکتے ہیں۔ تفصیلات کے لیے، میں نوٹ بک دیکھیں GitHub ذخیرہ.

finetuned_predictor = estimator.deploy()

ٹھیک ٹیوننگ تکنیک

لینگویج ماڈل جیسے لاما کا سائز 10 جی بی یا اس سے بھی زیادہ 100 جی بی ہے۔ اس طرح کے بڑے ماڈلز کو فائن ٹیوننگ کے لیے نمایاں طور پر زیادہ CUDA میموری کے ساتھ مثالوں کی ضرورت ہوتی ہے۔ مزید برآں، ماڈل کے سائز کی وجہ سے ان ماڈلز کی تربیت بہت سست ہو سکتی ہے۔ اس لیے، موثر فائن ٹیوننگ کے لیے، ہم درج ذیل اصلاح کا استعمال کرتے ہیں:

  • کم درجہ کی موافقت (LoRA) - یہ بڑے ماڈلز کی موثر فائن ٹیوننگ کے لیے پیرامیٹر ایفیشینٹ فائن ٹیوننگ (PEFT) کی ایک قسم ہے۔ اس طریقہ کے ساتھ، آپ پورے ماڈل کو منجمد کرتے ہیں اور ماڈل میں ایڈجسٹ پیرامیٹرز یا پرتوں کا صرف ایک چھوٹا سیٹ شامل کرتے ہیں۔ مثال کے طور پر، Llama 7 2B کے لیے تمام 7 بلین پیرامیٹرز کو تربیت دینے کے بجائے، آپ پیرامیٹرز کے 1% سے کم کو ٹھیک کر سکتے ہیں۔ اس سے یادداشت کی ضرورت کو نمایاں طور پر کم کرنے میں مدد ملتی ہے کیونکہ آپ کو صرف 1% پیرامیٹرز کے لیے گریڈیئنٹس، آپٹیمائزر اسٹیٹس، اور دیگر تربیت سے متعلق معلومات کو ذخیرہ کرنے کی ضرورت ہے۔ مزید برآں، یہ تربیت کے وقت کے ساتھ ساتھ لاگت کو کم کرنے میں مدد کرتا ہے۔ اس طریقہ کار کے بارے میں مزید تفصیلات کے لیے رجوع کریں۔ LoRA: بڑی زبان کے ماڈلز کی کم درجہ کی موافقت.
  • int8 کوانٹائزیشن - LoRA جیسی اصلاح کے ساتھ بھی، Llama 70B جیسے ماڈل ابھی بھی تربیت کے لیے بہت بڑے ہیں۔ تربیت کے دوران میموری کے اثرات کو کم کرنے کے لیے، آپ تربیت کے دوران Int8 کوانٹائزیشن استعمال کر سکتے ہیں۔ کوانٹائزیشن عام طور پر فلوٹنگ پوائنٹ ڈیٹا کی قسموں کی درستگی کو کم کرتی ہے۔ اگرچہ یہ ماڈل وزن کو ذخیرہ کرنے کے لیے درکار میموری کو کم کرتا ہے، لیکن یہ معلومات کے نقصان کی وجہ سے کارکردگی کو کم کرتا ہے۔ Int8 کوانٹائزیشن صرف ایک چوتھائی درستگی کا استعمال کرتی ہے لیکن اس سے کارکردگی میں کمی نہیں آتی ہے کیونکہ یہ صرف بٹس کو نہیں چھوڑتا ہے۔ یہ ڈیٹا کو ایک قسم سے دوسری قسم میں گول کرتا ہے۔ Int8 کوانٹائزیشن کے بارے میں جاننے کے لیے، رجوع کریں۔ LLM.int8(): پیمانے پر ٹرانسفارمرز کے لیے 8 بٹ میٹرکس ضرب.
  • مکمل طور پر شارڈ ڈیٹا متوازی (FSDP) - یہ ڈیٹا متوازی ٹریننگ الگورتھم کی ایک قسم ہے جو ماڈل کے پیرامیٹرز کو ڈیٹا کے متوازی ورکرز میں شارڈ کرتا ہے اور اختیاری طور پر تربیتی کمپیوٹیشن کے کچھ حصے کو CPUs میں آف لوڈ کر سکتا ہے۔ اگرچہ پیرامیٹرز مختلف GPUs میں شارڈ کیے گئے ہیں، لیکن ہر مائکرو بیچ کی گنتی GPU کارکن کے لیے مقامی ہے۔ یہ پیرامیٹرز کو زیادہ یکساں طور پر شارڈ کرتا ہے اور تربیت کے دوران کمیونیکیشن اور کمپیوٹیشن اوور لیپنگ کے ذریعے بہتر کارکردگی حاصل کرتا ہے۔

مندرجہ ذیل جدول مختلف ترتیبات کے ساتھ ہر ماڈل کی تفصیلات کا خلاصہ کرتا ہے۔

ماڈل خودکار ترتیبات LORA + FSDP LORA + کوئی FSDP نہیں۔ Int8 کوانٹائزیشن + LORA + کوئی FSDP نہیں۔
کوڈ لاما 2 7B LORA + FSDP جی ہاں جی ہاں جی ہاں
کوڈ لاما 2 13B LORA + FSDP جی ہاں جی ہاں جی ہاں
کوڈ لاما 2 34B INT8 + LORA + کوئی FSDP نہیں۔ نہیں نہیں جی ہاں
کوڈ لاما 2 70B INT8 + LORA + کوئی FSDP نہیں۔ نہیں نہیں جی ہاں

لاما ماڈلز کی فائن ٹیوننگ درج ذیل کے فراہم کردہ اسکرپٹ پر مبنی ہے۔ GitHub repo.

تربیت کے لیے معاون ہائپرپیرامیٹر

کوڈ لاما 2 فائن ٹیوننگ متعدد ہائپر پیرامیٹرس کو سپورٹ کرتا ہے، جن میں سے ہر ایک میموری کی ضرورت، ٹریننگ کی رفتار، اور فائن ٹیونڈ ماڈل کی کارکردگی کو متاثر کر سکتا ہے:

  • عہد - پاسوں کی تعداد جو فائن ٹیوننگ الگورتھم ٹریننگ ڈیٹاسیٹ کے ذریعے لیتی ہے۔ 1 سے بڑا عدد ہونا چاہیے۔ ڈیفالٹ 5 ہے۔
  • سیکھنے کی_ شرح - وہ شرح جس پر تربیتی مثالوں کے ہر بیچ کے ذریعے کام کرنے کے بعد ماڈل کے وزن کو اپ ڈیٹ کیا جاتا ہے۔ 0 سے بڑا مثبت فلوٹ ہونا چاہیے۔ پہلے سے طے شدہ 1e-4 ہے۔
  • instruction_tuned - ماڈل کو تربیت دینا ہے یا نہیں۔ ضروری ہے True or False. پہلے سے طے شدہ ہے۔ False.
  • per_device_train_batch_size - تربیت کے لیے فی GPU کور/CPU بیچ کا سائز۔ مثبت عدد ہونا ضروری ہے۔ ڈیفالٹ 4 ہے۔
  • per_device_eval_batch_size - تشخیص کے لیے فی GPU کور/CPU بیچ کا سائز۔ ایک مثبت عدد ہونا ضروری ہے۔ ڈیفالٹ 1 ہے۔
  • زیادہ سے زیادہ_ٹرین_نمونے - ڈیبگنگ کے مقاصد یا تیز تر تربیت کے لیے، تربیتی مثالوں کی تعداد کو اس قدر تک چھوٹا کریں۔ ویلیو -1 کا مطلب ہے تمام تربیتی نمونے استعمال کرنا۔ مثبت عدد یا -1 ہونا چاہیے۔ ڈیفالٹ -1 ہے۔
  • max_val_samples - ڈیبگنگ کے مقاصد یا تیز تر تربیت کے لیے، توثیق کی مثالوں کی تعداد کو اس قدر تک چھوٹا کریں۔ ویلیو -1 کا مطلب ہے توثیق کے تمام نمونے استعمال کرنا۔ مثبت عدد یا -1 ہونا چاہیے۔ ڈیفالٹ -1 ہے۔
  • زیادہ سے زیادہ_ان پٹ_لمبائی - ٹوکنائزیشن کے بعد زیادہ سے زیادہ کل ان پٹ تسلسل کی لمبائی۔ اس سے لمبے سلسلے کو کاٹ دیا جائے گا۔ اگر -1، max_input_length کم از کم 1024 اور ٹوکنائزر کے ذریعہ بیان کردہ ماڈل کی زیادہ سے زیادہ لمبائی پر سیٹ ہے۔ اگر مثبت قدر پر سیٹ ہو، max_input_length فراہم کردہ قدر کی کم از کم پر سیٹ ہے اور model_max_length ٹوکنائزر کے ذریعہ بیان کیا گیا ہے۔ مثبت عدد یا -1 ہونا چاہیے۔ ڈیفالٹ -1 ہے۔
  • validation_split_ratio - اگر توثیق کا چینل ہے۔ none، ٹرین ڈیٹا سے ٹرین کی توثیق کی تقسیم کا تناسب 0-1 کے درمیان ہونا چاہیے۔ ڈیفالٹ 0.2 ہے۔
  • ٹرین_ڈیٹا_سپلٹ_سیڈ - اگر توثیق کا ڈیٹا موجود نہیں ہے، تو یہ الگورتھم کے ذریعے استعمال کیے جانے والے ان پٹ ٹریننگ ڈیٹا کی ٹریننگ اور توثیق کے ڈیٹا کی بے ترتیب تقسیم کو ٹھیک کرتا ہے۔ ایک عدد عدد ہونا ضروری ہے۔ ڈیفالٹ 0 ہے۔
  • پری پروسیسنگ_num_workers - پری پروسیسنگ کے لیے استعمال کیے جانے والے عمل کی تعداد۔ اگر None، اہم عمل پری پروسیسنگ کے لئے استعمال کیا جاتا ہے۔ پہلے سے طے شدہ ہے۔ None.
  • lora_r - Lora R. ایک مثبت عدد ہونا ضروری ہے۔ ڈیفالٹ 8 ہے۔
  • لورا_الفا - لورا الفا ایک مثبت عدد ہونا ضروری ہے۔ ڈیفالٹ 32 ہے۔
  • lora_dropout - لورا ڈراپ آؤٹ۔ 0 اور 1 کے درمیان مثبت فلوٹ ہونا چاہیے۔ پہلے سے طے شدہ 0.05 ہے۔
  • int8_کوانٹائزیشن - اگر True، ماڈل تربیت کے لیے 8 بٹ درستگی کے ساتھ بھری ہوئی ہے۔ 7B اور 13B کے لیے ڈیفالٹ ہے۔ False. 70B کے لیے ڈیفالٹ ہے۔ True.
  • enable_fsdp - اگر درست ہے تو، تربیت FSDP استعمال کرتی ہے۔ 7B اور 13B کے لیے ڈیفالٹ درست ہے۔ 70B کے لیے ڈیفالٹ غلط ہے۔ یاد رکھیں کہ int8_quantization FSDP کے ساتھ تعاون یافتہ نہیں ہے۔

ہائپر پیرامیٹرز کا انتخاب کرتے وقت، درج ذیل پر غور کریں:

  • مقرر int8_quantization=True یادداشت کی ضرورت کو کم کرتا ہے اور تیز تربیت کا باعث بنتا ہے۔
  • کمی per_device_train_batch_size اور max_input_length میموری کی ضرورت کو کم کرتا ہے اور اس وجہ سے چھوٹی مثالوں پر چلایا جاسکتا ہے۔ تاہم، بہت کم اقدار قائم کرنے سے تربیت کا وقت بڑھ سکتا ہے۔
  • اگر آپ Int8 کوانٹائزیشن استعمال نہیں کر رہے ہیں (int8_quantization=Falseاستعمال کریں FSDP (enable_fsdp=True) تیز اور موثر تربیت کے لیے۔

تربیت کے لیے معاون مثال کی اقسام

مندرجہ ذیل جدول مختلف ماڈلز کی تربیت کے لیے معاون مثال کی اقسام کا خلاصہ کرتا ہے۔

ماڈل پہلے سے طے شدہ مثال کی قسم تائید شدہ مثال کی اقسام
کوڈ لاما 2 7B ml.g5.12xlarge

ml.g5.12xlarge,

ml.g5.24xlarge,

ml.g5.48xlarge,

ml.p3dn.24xlarge،

ml.g4dn.12xlarge

کوڈ لاما 2 13B ml.g5.12xlarge

ml.g5.24xlarge,

ml.g5.48xlarge,

ml.p3dn.24xlarge،

ml.g4dn.12xlarge

کوڈ لاما 2 70B ml.g5.48xlarge

ml.g5.48xlarge

ml.p4d.24xlarge

مثال کی قسم کا انتخاب کرتے وقت، درج ذیل پر غور کریں:

  • G5 مثالیں معاون مثال کی اقسام میں سب سے زیادہ موثر تربیت فراہم کرتی ہیں۔ لہذا، اگر آپ کے پاس G5 مثالیں دستیاب ہیں، تو آپ کو ان کا استعمال کرنا چاہیے۔
  • تربیت کا وقت زیادہ تر GPUs کی تعداد اور دستیاب CUDA میموری پر منحصر ہے۔ لہذا، ایک ہی تعداد میں GPUs کے ساتھ مثالوں پر تربیت (مثال کے طور پر، ml.g5.2xlarge اور ml.g5.4xlarge) تقریباً ایک جیسی ہے۔ لہذا، آپ تربیت کے لیے سستی مثال استعمال کر سکتے ہیں (ml.g5.2xlarge)۔
  • p3 مثالوں کا استعمال کرتے وقت، تربیت 32 بٹ درستگی کے ساتھ کی جائے گی کیونکہ bfloat16 ان مثالوں پر تعاون یافتہ نہیں ہے۔ لہذا، تربیتی کام CUDA میموری کی دوگنی مقدار استعمال کرے گا جب g3 مثالوں کے مقابلے p5 مثالوں پر تربیت دی جائے گی۔

فی مثال تربیت کی لاگت کے بارے میں جاننے کے لیے، ملاحظہ کریں۔ ایمیزون EC2 G5 مثالوں.

تشخیص

ٹھیک ٹیونڈ ماڈلز کی کارکردگی کا جائزہ لینے کے لیے تشخیص ایک اہم قدم ہے۔ ہم نان فائن ٹیون والے ماڈلز پر فائن ٹیونڈ ماڈلز کی بہتری کو ظاہر کرنے کے لیے گتاتمک اور مقداری تشخیص پیش کرتے ہیں۔ کوالٹیٹیو ایویلیویشن میں، ہم دونوں فائن ٹیونڈ اور نان فائن ٹیونڈ ماڈلز سے ایک مثالی ردعمل دکھاتے ہیں۔ مقداری تشخیص میں، ہم استعمال کرتے ہیں۔ ہیومن ایول، ایک ٹیسٹ سویٹ جو OpenAI کے ذریعے تیار کیا گیا ہے تاکہ درست اور درست نتائج پیدا کرنے کی صلاحیتوں کو جانچنے کے لیے Python کوڈ تیار کیا جا سکے۔ HumanEval ذخیرہ MIT لائسنس کے تحت ہے۔ ہم نے تمام کوڈ LIama ماڈلز کے Python کی مختلف شکلوں کو مختلف سائزوں میں ٹھیک کیا ہے (کوڈ LIama Python 7B، 13B، 34B، اور 70B ڈولفن کوڈر ڈیٹاسیٹ)، اور تشخیصی نتائج کو درج ذیل حصوں میں پیش کریں۔

معیار کی تشخیص

آپ کے فائن ٹیونڈ ماڈل کے تعینات ہونے کے ساتھ، آپ کوڈ بنانے کے لیے اینڈ پوائنٹ کا استعمال شروع کر سکتے ہیں۔ درج ذیل مثال میں، ہم ٹیسٹ کے نمونے پر بیس اور فائن ٹیونڈ کوڈ LIama 34B Python کی مختلف حالتوں سے جوابات پیش کرتے ہیں۔ ڈولفن کوڈر ڈیٹاسیٹ:

alpaca_format = """{system_prompt}

### Input:
{question}

### Response:n"""

system="You are a coding AI"
prompt = """Please explain the reasoning behind the following solution and 
provide code in python: Given a string `s`, return the longest palindromic 
substring in `s`. **Example 1:** **Input:** s = "babad " **Output:** "bab " 
**Explanation:** "aba " is also a valid answer. **Example 2:** 
**Input:** s = "cbbd " **Output:** "bb " 
**Constraints:** * `1 <= s.length <= 1000` * `s` consist of only digits 
and English letters."""

payload = json.dumps({
    "inputText": alpaca_format.format(system_prompt=system, question=prompt),
    "textGenerationConfig": {
    "maxTokenCount": 2048,
    "temperature":0.2
}})

finetuned_response = finetuned_predictor.predict(payload)
finetuned_response["generated_text"]

ٹھیک ٹیونڈ کوڈ لاما ماڈل، سابقہ ​​استفسار کے لیے کوڈ فراہم کرنے کے علاوہ، نقطہ نظر کی تفصیلی وضاحت اور ایک چھدم کوڈ تیار کرتا ہے۔

کوڈ لاما 34b پائتھون نان فائن ٹیونڈ رسپانس:

### Code
def longestPalindrome(s):
    # Fill this in.
    longest = ""
    for i in range(len(s)):
        for j in range(len(s), i, -1):
            if len(longest) >= j-i:
                break
            elif s[i:j] == s[i:j][::-1]:
                longest = s[i:j]
                break
    return longest

print(longestPalindrome("abaxyzzyxf"))
# axyzzyx
###Reference:
- [https://www.geeksforgeeks.org/longest-palindrome-substring-set-1/]
(https://www.geeksforgeeks.org/longest-palindrome-substring-set-1/)

کوڈ Llama 34B Python فائن ٹیونڈ رسپانس

### Explanation
The algorithm uses dynamic programming to find the longest palindromic substring. 
It initializes a 2D boolean table `dp` with the same dimensions as the input string `s`. 
The `dp[i][j]` value is set to `true` if the substring from index `i` to index `j` is a palindrome.

The algorithm then iterates through the string in a nested loop, starting from the first character to the last. 
It checks if the substring from index `i` to index `j` is a palindrome. 
If it is, it sets the `dp[i][j]` value to `true`. 
If the substring is of length 2 or 3, it sets the `dp[i][j]` value to `true` as well.

After the nested loop, the algorithm iterates through the `dp` table to find the longest palindromic substring. 
It keeps track of the maximum length and the starting and ending indices of the substring.

Finally, the algorithm returns the substring from the starting index to the ending index.

### Code
```python
def longestPalindrome(s: str) -> str:
    n = len(s)
    dp = [[False] * n for _ in range(n)]

    for i in range(n):
        dp[i][i] = True
        if i + 1 < n:
            dp[i][i + 1] = s[i] == s[i + 1]

    max_len = 1
    start = 0
    end = 0

    for i in range(n - 1):
        for j in range(i + 1, n):
            if j - i == 1 or dp[i + 1][j - 1]:
                dp[i][j] = s[i] == s[j]
                if j - i + 1 > max_len:
                    max_len = j - i + 1
                    start = i
                    end = j

    return s[start:end + 1]
```

زمینی حقائق

### Explanation 
1. Initialize `start` and `maxLength` for result substring. 
2. Iterate through the given string `s` using the index `i`. 
3. For each index `i`, create two pointers `l` and `r` starting at `i`. 
4. Check if there's a consecutive sequence of identical characters, increment the right pointer `r` until the end of the sequence is reached. 
5. Update the index `i` to the current value of `r`. 
6. Expand the pointers `l` and `r` outwards to find the longest palindromic substring, checking that characters on both sides are equal. 
7. If the current length of the substring is greater than `maxLength`, update `start` and `maxLength`. 
8. Return the longest palindromic substring using the `start` and `maxLength`. 

### Code 
```python 
def longest_palindromic_substring(s: str) → str:
    n = len(s)
    if n == 0:
        return ""
    
    start, max_length = 0, 1
    for i in range(n):
        l, r = i, i
        while r < n - 1 and s[r] == s[r + 1]:
            r += 1
            i = r
        while l > 0 and r < n - 1 and s[l - 1] == s[r + 1]:
            l -= 1
            r += 1
        length = r - l + 1
        if length > max_length:
            start, max_length = l, length
    return s[start:start + max_length]
```

دلچسپ بات یہ ہے کہ کوڈ للاما 34B پائتھون کا ہمارا ٹھیک ٹیون ورژن سب سے طویل پیلینڈرومک سبسٹرنگ کے لیے ایک متحرک پروگرامنگ پر مبنی حل فراہم کرتا ہے، جو کہ منتخب ٹیسٹ مثال سے زمینی سچائی میں فراہم کردہ حل سے مختلف ہے۔ ہمارا ٹھیک بنایا ہوا ماڈل تفصیل سے متحرک پروگرامنگ پر مبنی حل کی وجوہات اور وضاحت کرتا ہے۔ دوسری طرف، نان فائن ٹیونڈ ماڈل ممکنہ آؤٹ پٹس کے عین بعد ہیلوسینیٹ کرتا ہے۔ print بیان (بائیں سیل میں دکھایا گیا ہے) کیونکہ آؤٹ پٹ axyzzyx دی گئی تار میں سب سے لمبا پیلینڈروم نہیں ہے۔ وقت کی پیچیدگی کے لحاظ سے، متحرک پروگرامنگ حل عام طور پر ابتدائی نقطہ نظر سے بہتر ہے۔ متحرک پروگرامنگ حل میں O(n^2) کی وقتی پیچیدگی ہے، جہاں n ان پٹ سٹرنگ کی لمبائی ہے۔ یہ نان فائن ٹیونڈ ماڈل کے ابتدائی حل سے زیادہ موثر ہے، جس میں O(n^2) کی چوکور وقت کی پیچیدگی بھی تھی لیکن کم بہتر انداز کے ساتھ۔

یہ امید افزا لگتا ہے! یاد رکھیں، ہم نے صرف 10% کے ساتھ کوڈ LIama Python ویرینٹ کو ٹھیک بنایا ہے۔ ڈولفن کوڈر ڈیٹاسیٹ. دریافت کرنے کے لیے اور بھی بہت کچھ ہے!

جواب میں مکمل ہدایات کے باوجود، ہمیں ابھی بھی حل میں فراہم کردہ Python کوڈ کی درستگی کا جائزہ لینے کی ضرورت ہے۔ اگلا، ہم ایک تشخیصی فریم ورک استعمال کرتے ہیں جسے کہا جاتا ہے۔ ہیومن ایول کوڈ LIama سے پیدا کردہ جواب پر انضمام ٹیسٹ چلانے کے لیے اس کے معیار کو منظم طریقے سے جانچنا۔

HumanEval کے ساتھ مقداری تشخیص

ہیومن ایول ایل ایل ایم کی ازگر پر مبنی کوڈنگ کے مسائل پر مسئلہ حل کرنے کی صلاحیتوں کا جائزہ لینے کے لیے ایک تشخیصی استعمال ہے، جیسا کہ مقالے میں بیان کیا گیا ہے۔ کوڈ پر تربیت یافتہ بڑی زبان کے ماڈلز کا جائزہ لینا. خاص طور پر، یہ 164 اصل Python پر مبنی پروگرامنگ کے مسائل پر مشتمل ہے جو کہ فنکشن کے دستخط، docstring، باڈی، اور یونٹ ٹیسٹ جیسی فراہم کردہ معلومات کی بنیاد پر کوڈ بنانے کی زبان کے ماڈل کی صلاحیت کا اندازہ لگاتا ہے۔

ہر Python پر مبنی پروگرامنگ سوال کے لیے، ہم اسے K کے جوابات حاصل کرنے کے لیے SageMaker اینڈ پوائنٹ پر تعینات کوڈ LIama ماڈل پر بھیجتے ہیں۔ اگلا، ہم ہیومن ایول ریپوزٹری میں انٹیگریشن ٹیسٹوں پر ہر ایک کے جوابات چلاتے ہیں۔ اگر k کے جوابات کا کوئی بھی جواب انضمام کے ٹیسٹوں میں کامیاب ہو جاتا ہے، تو ہم اس ٹیسٹ کیس کو کامیاب شمار کرتے ہیں۔ دوسری صورت میں، ناکام. پھر ہم کامیاب کیسوں کے تناسب کو شمار کرنے کے عمل کو دہراتے ہیں جیسا کہ حتمی تشخیص اسکور کا نام دیا گیا ہے۔ pass@k. معیاری مشق کے بعد، ہم نے اپنی تشخیص میں k کو 1 کے طور پر مقرر کیا، تاکہ فی سوال صرف ایک جواب پیدا کیا جا سکے اور یہ جانچیں کہ آیا یہ انضمام کا امتحان پاس کرتا ہے۔

HumanEval ذخیرہ استعمال کرنے کے لیے ذیل میں ایک نمونہ کوڈ ہے۔ آپ ڈیٹاسیٹ تک رسائی حاصل کر سکتے ہیں اور SageMaker اینڈ پوائنٹ کا استعمال کرتے ہوئے ایک ہی ردعمل پیدا کر سکتے ہیں۔ تفصیلات کے لیے، میں نوٹ بک دیکھیں GitHub ذخیرہ.

%pip3 install human_eval
import json
from human_eval.evaluation import evaluate_functional_correctness
from human_eval.data import write_jsonl, read_problems
from tqdm import tqdm
problems = read_problems()

num_samples_per_task = 1 # value k: number of responses for each question
samples = [
    dict(task_id=task_id, completion=generate_one_completion(problems[task_id]["prompt"]))
    for task_id in tqdm(problems)
    for _ in range(num_samples_per_task)
]
write_jsonl("samples.jsonl", samples)

evaluate_functional_correctness('./samples.jsonl')

مندرجہ ذیل جدول مختلف ماڈل سائزوں میں نان فائن ٹیونڈ ماڈلز کے مقابلے میں فائن ٹیونڈ کوڈ LIama Python ماڈلز کی بہتری کو ظاہر کرتا ہے۔ درستگی کو یقینی بنانے کے لیے، ہم نان فائن ٹیونڈ کوڈ LIama ماڈلز کو SageMaker اینڈ پوائنٹس میں بھی تعینات کرتے ہیں اور انسانی Eval کی تشخیص کے ذریعے چلتے ہیں۔ دی پاس@1 نمبرز (مندرجہ ذیل جدول میں پہلی قطار) میں رپورٹ کردہ نمبروں سے میل کھاتے ہیں۔ کوڈ لاما ریسرچ پیپر۔ انفرنس پیرامیٹرز کو مستقل طور پر سیٹ کیا جاتا ہے۔ "parameters": {"max_new_tokens": 384, "temperature": 0.2}.

جیسا کہ ہم نتائج سے دیکھ سکتے ہیں، تمام فائن ٹیون شدہ کوڈ LIama Python کی مختلف حالتیں نان فائن ٹیونڈ ماڈلز کے مقابلے میں نمایاں بہتری دکھاتی ہیں۔ خاص طور پر، کوڈ LIama Python 70B نان فائن ٹیونڈ ماڈل کو تقریباً 12% پیچھے چھوڑ دیتا ہے۔

. 7B ازگر 13B ازگر 34B 34B ازگر 70B ازگر
پہلے سے تربیت یافتہ ماڈل کی کارکردگی (پاس@1) 38.4 43.3 48.8 53.7 57.3
عمدہ ماڈل کی کارکردگی (پاس@1) 45.12 45.12 59.1 61.5 69.5

اب آپ اپنے ڈیٹاسیٹ پر فائن ٹیوننگ کوڈ LIama ماڈلز کو آزما سکتے ہیں۔

صاف کرو

اگر آپ فیصلہ کرتے ہیں کہ آپ SageMaker اینڈ پوائنٹ کو مزید چلانا نہیں چاہتے ہیں، تو آپ اسے استعمال کرکے حذف کر سکتے ہیں۔ AWS SDK برائے Python (Boto3), AWS کمانڈ لائن انٹرفیس (AWS CLI)، یا SageMaker کنسول۔ مزید معلومات کے لیے دیکھیں اختتامی مقامات اور وسائل کو حذف کریں۔. اس کے علاوہ، آپ کر سکتے ہیں سیج میکر اسٹوڈیو کے وسائل کو بند کریں۔ جن کی مزید ضرورت نہیں ہے۔

نتیجہ

اس پوسٹ میں، ہم نے SageMaker JumpStart کا استعمال کرتے ہوئے Meta's Code Llama 2 ماڈلز کو ٹھیک کرنے پر تبادلہ خیال کیا۔ ہم نے دکھایا کہ آپ SageMaker اسٹوڈیو میں SageMaker JumpStart کنسول یا SageMaker Python SDK کو ان ماڈلز کو ٹھیک کرنے اور ان کو تعینات کرنے کے لیے استعمال کر سکتے ہیں۔ ہم نے فائن ٹیوننگ تکنیک، مثال کی اقسام، اور معاون ہائپر پیرامیٹرس پر بھی تبادلہ خیال کیا۔ اس کے علاوہ، ہم نے اپنے کیے گئے مختلف ٹیسٹوں کی بنیاد پر بہتر تربیت کے لیے سفارشات کا خاکہ پیش کیا۔ جیسا کہ ہم دو ڈیٹاسیٹس پر تین ماڈلز کو فائن ٹیوننگ کے ان نتائج سے دیکھ سکتے ہیں، فائن ٹیوننگ نان فائن ٹیونڈ ماڈلز کے مقابلے میں خلاصہ کو بہتر بناتی ہے۔ اگلے قدم کے طور پر، آپ GitHub ریپوزٹری میں فراہم کردہ کوڈ کا استعمال کرتے ہوئے ان ماڈلز کو اپنے ڈیٹاسیٹ پر ٹھیک کرنے کی کوشش کر سکتے ہیں تاکہ آپ کے استعمال کے معاملات کے نتائج کو جانچا جا سکے۔


مصنفین کے بارے میں

Fine-tune Code Llama on Amazon SageMaker JumpStart | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.ڈاکٹر ژن ہوانگ ایمیزون سیج میکر جمپ اسٹارٹ اور ایمیزون سیج میکر بلٹ ان الگورتھم کے سینئر اپلائیڈ سائنٹسٹ ہیں۔ وہ اسکیل ایبل مشین لرننگ الگورتھم تیار کرنے پر توجہ مرکوز کرتا ہے۔ اس کی تحقیقی دلچسپیاں قدرتی لینگویج پروسیسنگ، ٹیبلر ڈیٹا پر قابل وضاحت گہرائی سے سیکھنے، اور نان پیرامیٹرک اسپیس ٹائم کلسٹرنگ کے مضبوط تجزیہ کے شعبے میں ہیں۔ انہوں نے ACL، ICDM، KDD کانفرنسوں، اور رائل شماریاتی سوسائٹی: سیریز A میں بہت سے مقالے شائع کیے ہیں۔

Fine-tune Code Llama on Amazon SageMaker JumpStart | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.وشال یالامانچلی ایک سٹارٹ اپ سولیوشن آرکیٹیکٹ ہے جو ابتدائی مرحلے کے جنریٹو AI، روبوٹکس اور خود مختار گاڑیوں کی کمپنیوں کے ساتھ کام کر رہا ہے۔ وشال اپنے صارفین کے ساتھ جدید ترین ایم ایل حل فراہم کرنے کے لیے کام کرتا ہے اور ذاتی طور پر کمک سیکھنے، ایل ایل ایم کی تشخیص، اور کوڈ جنریشن میں دلچسپی رکھتا ہے۔ AWS سے پہلے، وشال UCI میں ایک انڈرگریجویٹ تھا، جس کی توجہ بائیو انفارمیٹکس اور ذہین نظاموں پر تھی۔

Fine-tune Code Llama on Amazon SageMaker JumpStart | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.میناکشی سندرم تھنڈاورائن AWS کے لیے بطور AI/ML ماہر کام کرتا ہے۔ اسے انسانی مرکز میں ڈیٹا اور تجزیاتی تجربات کو ڈیزائن، تخلیق اور فروغ دینے کا جنون ہے۔ مینا ایسے پائیدار نظاموں کو تیار کرنے پر توجہ مرکوز کرتی ہے جو AWS کے اسٹریٹجک صارفین کے لیے قابل پیمائش، مسابقتی فوائد فراہم کرتے ہیں۔ مینا ایک کنیکٹر اور ڈیزائن سوچنے والی ہے، اور جدت، انکیوبیشن، اور ڈیموکریٹائزیشن کے ذریعے کاروبار کو کام کرنے کے نئے طریقوں کی طرف لے جانے کی کوشش کرتی ہے۔

Fine-tune Code Llama on Amazon SageMaker JumpStart | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.ڈاکٹر آشیش کھیتان Amazon SageMaker بلٹ ان الگورتھم کے ساتھ ایک سینئر اپلائیڈ سائنٹسٹ ہے اور مشین لرننگ الگورتھم تیار کرنے میں مدد کرتا ہے۔ انہوں نے یونیورسٹی آف الینوائے اربانا-چمپین سے پی ایچ ڈی کی۔ وہ مشین لرننگ اور شماریاتی اندازہ میں ایک فعال محقق ہے، اور اس نے NeurIPS، ICML، ICLR، JMLR، ACL، اور EMNLP کانفرنسوں میں بہت سے مقالے شائع کیے ہیں۔

ٹائم اسٹیمپ:

سے زیادہ AWS مشین لرننگ