شعار زيفيرنت

نماذج إنشاء أكواد Code Llama من Meta متاحة الآن عبر Amazon SageMaker JumpStart | خدمات ويب أمازون

التاريخ:

اليوم، يسعدنا أن نعلن أن نماذج أساس Code Llama، التي طورتها شركة Meta، متاحة للعملاء من خلال أمازون سيج ميكر جومب ستارت للنشر بنقرة واحدة لتشغيل الاستدلال. Code Llama هو نموذج لغة كبير متطور (LLM) قادر على إنشاء تعليمات برمجية ولغة طبيعية حول التعليمات البرمجية من كل من التعليمات البرمجية واللغة الطبيعية. Code Llama مجاني للبحث والاستخدام التجاري. يمكنك تجربة هذا النموذج باستخدام SageMaker JumpStart، وهو مركز التعلم الآلي (ML) الذي يوفر الوصول إلى الخوارزميات والنماذج وحلول تعلم الآلة حتى تتمكن من بدء استخدام تعلم الآلة بسرعة. في هذا المنشور، سنتعرف على كيفية اكتشاف نموذج Code Llama ونشره عبر SageMaker JumpStart.

ما هو كود اللاما

Code Llama هو نموذج تم إصداره بواسطة مييتااا الذي تم بناؤه أعلى Llama 2 وهو نموذج حديث مصمم لتحسين إنتاجية مهام البرمجة للمطورين من خلال مساعدتهم على إنشاء تعليمات برمجية عالية الجودة وموثقة جيدًا. تُظهر النماذج أداءً متطورًا في Python وC++ وJava وPHP وC# وTypeScript وBash، ولديها القدرة على توفير وقت المطورين وجعل سير عمل البرامج أكثر كفاءة. يأتي في ثلاثة أشكال مختلفة، تم تصميمه لتغطية مجموعة واسعة من التطبيقات: النموذج التأسيسي (Code Llama)، ونموذج Python المتخصص (Code Llama-Python)، ونموذج متابعة التعليمات لفهم تعليمات اللغة الطبيعية (Code Llama-Instruct ). تأتي جميع متغيرات Code Llama بثلاثة أحجام: معلمات 7B و13B و34B. تدعم متغيرات القاعدة والتعليمات 7B و13B عملية التعبئة بناءً على المحتوى المحيط، مما يجعلها مثالية لتطبيقات مساعد التعليمات البرمجية.

تم تصميم النماذج باستخدام Llama 2 كقاعدة ثم تم تدريبها على 500 مليار رمز مميز من بيانات التعليمات البرمجية، مع تدريب إصدار Python المتخصص على 100 مليار رمز إضافي. توفر نماذج Code Llama للأجيال المستقرة ما يصل إلى 100,000 رمز مميز للسياق. يتم تدريب جميع النماذج على تسلسلات مكونة من 16,000 رمز مميز وتظهر تحسينات على المدخلات بما يصل إلى 100,000 رمز مميز.

النموذج متاح تحت نفس ترخيص المجتمع باسم Llama 2.

ما هو برنامج SageMaker JumpStart

باستخدام SageMaker JumpStart، يمكن لممارسي تعلم الآلة الاختيار من قائمة متزايدة من نماذج الأساس الأفضل أداءً. يمكن لممارسي ML نشر النماذج الأساسية لـ مخصصة الأمازون SageMaker مثيلات داخل بيئة شبكة معزولة وتخصيص النماذج باستخدام SageMaker للتدريب على النماذج ونشرها.

يمكنك الآن اكتشاف نماذج Code Llama ونشرها ببضع نقرات أمازون ساجميكر ستوديو أو برمجيًا من خلال SageMaker Python SDK ، مما يتيح لك اشتقاق أداء النموذج وعناصر تحكم MLOps باستخدام ميزات SageMaker مثل خطوط أنابيب Amazon SageMaker, الأمازون SageMaker المصححأو سجلات الحاوية. يتم نشر النموذج في بيئة AWS الآمنة وتحت ضوابط VPC الخاصة بك، مما يساعد على ضمان أمان البيانات. نماذج Code Llama قابلة للاكتشاف ويمكن نشرها في مناطق شرق الولايات المتحدة (شمال فيرجينيا) وغرب الولايات المتحدة (أوريغون) وأوروبا (أيرلندا).

يجب على العملاء قبول اتفاقية ترخيص المستخدم النهائي (EULA) لنشر نموذج التأشيرة SageMaker SDK.

اكتشف الموديلات

يمكنك الوصول إلى النماذج الأساسية لـ Code Llama من خلال SageMaker JumpStart في SageMaker Studio UI وSageMaker Python SDK. في هذا القسم، سنتعرف على كيفية اكتشاف النماذج في SageMaker Studio.

SageMaker Studio عبارة عن بيئة تطوير متكاملة (IDE) توفر واجهة مرئية واحدة قائمة على الويب حيث يمكنك الوصول إلى الأدوات المصممة لغرض تنفيذ جميع خطوات تطوير ML ، من إعداد البيانات إلى البناء والتدريب ونشر نماذج ML الخاصة بك. لمزيد من التفاصيل حول كيفية البدء وإعداد SageMaker Studio ، يرجى الرجوع إلى أمازون ساجميكر ستوديو.

في SageMaker Studio، يمكنك الوصول إلى SageMaker JumpStart، الذي يحتوي على نماذج ودفاتر ملاحظات وحلول تم إنشاؤها مسبقًا، ضمن حلول آلية ومبنية مسبقًا.

في الصفحة المقصودة لـ SageMaker JumpStart، يمكنك استعراض الحلول والنماذج ودفاتر الملاحظات والموارد الأخرى. يمكنك العثور على نماذج Code Llama في نماذج الأساس: إنشاء النص دائري.

يمكنك أيضًا العثور على متغيرات الطراز الأخرى عن طريق الاختيار استكشف جميع نماذج إنشاء النص أو البحث عن Code Llama.

يمكنك اختيار بطاقة النموذج لعرض تفاصيل حول النموذج مثل الترخيص والبيانات المستخدمة للتدريب وكيفية الاستخدام. ستجد أيضًا زرين، نشر و افتح المفكرةمما سيساعدك على استخدام النموذج.

نشر

عندما تختار نشر والموافقة على الشروط، سيبدأ النشر. وبدلاً من ذلك، يمكنك النشر من خلال مثال دفتر الملاحظات عن طريق الاختيار افتح المفكرة. دفتر الملاحظات النموذجي الذي يوفر إرشادات شاملة حول كيفية نشر النموذج للاستدلال وتنظيف الموارد.

للنشر باستخدام دفتر الملاحظات، نبدأ بتحديد النموذج المناسب، المحدد بواسطة model_id. يمكنك نشر أي من النماذج المحددة على SageMaker باستخدام الكود التالي:

from sagemaker.jumpstart.model import JumpStartModel model = JumpStartModel(model_id="meta-textgeneration-llama-codellama-7b")
predictor = model.deploy()

يؤدي هذا إلى نشر النموذج على SageMaker مع التكوينات الافتراضية ، بما في ذلك نوع المثيل الافتراضي وتكوينات VPC الافتراضية. يمكنك تغيير هذه التكوينات عن طريق تحديد قيم غير افتراضية بتنسيق نموذج JumpStart. بعد نشره ، يمكنك تشغيل الاستدلال مقابل نقطة النهاية المنشورة من خلال توقع SageMaker:

payload = { "inputs": "<s>[INST] How do I deploy a model on Amazon SageMaker? [/INST]", "parameters": {"max_new_tokens": 512, "temperature": 0.2, "top_p": 0.9}
}
predictor.predict(payload, custom_attributes="accept_eula=true")

لاحظ أنه افتراضيًا ، accept_eula ومن المقرر أن false. تحتاج إلى تعيين accept_eula=true لاستدعاء نقطة النهاية بنجاح. من خلال القيام بذلك ، فإنك تقبل اتفاقية ترخيص المستخدم وسياسة الاستخدام المقبول كما هو مذكور سابقًا. بامكانك ايضا بإمكانك تحميله اتفاقية الترخيص.

Custom_attributes المستخدمة لتمرير اتفاقية ترخيص المستخدم النهائي (EULA) هي أزواج المفتاح/القيمة. يتم الفصل بين المفتاح والقيمة بواسطة =، ويتم الفصل بين الأزواج بواسطة ;. إذا مرر المستخدم نفس المفتاح أكثر من مرة، فسيتم الاحتفاظ بالقيمة الأخيرة وتمريرها إلى معالج البرنامج النصي (في هذه الحالة، يُستخدم للمنطق الشرطي). على سبيل المثال، إذا accept_eula=false; accept_eula=true يتم تمريره إلى الخادم ، ثم accept_eula=true يتم الاحتفاظ بها وتمريرها إلى معالج البرنامج النصي.

تتحكم معلمات الاستدلال في عملية إنشاء النص عند نقطة النهاية. يشير الحد الأقصى للتحكم في الرموز المميزة الجديدة إلى حجم المخرجات التي تم إنشاؤها بواسطة النموذج. لاحظ أن هذا ليس هو نفسه عدد الكلمات لأن مفردات النموذج تختلف عن مفردات اللغة الإنجليزية ، وقد لا يكون كل رمز مميزًا كلمة باللغة الإنجليزية. تتحكم درجة الحرارة في العشوائية في الإخراج. ينتج عن ارتفاع درجة الحرارة نتائج أكثر إبداعًا وهلوسة. جميع معلمات الاستدلال اختيارية.

يسرد الجدول التالي جميع نماذج Code Llama المتوفرة في SageMaker JumpStart بالإضافة إلى معرفات النموذج وأنواع المثيلات الافتراضية والحد الأقصى من الرموز المميزة المدعومة (مجموع عدد الرموز المميزة للإدخال وعدد الرموز المميزة التي تم إنشاؤها لجميع الطلبات المتزامنة) المدعومة لكل من هذه النماذج.

نموذج الاسم معرف النموذج نوع المثيل الافتراضي الحد الأقصى من الرموز المدعومة
كود لاما-7ب meta-textgeneration-llama-codellama-7b ml.g5.2xlarge 10000
CodeLlama-7b-Instruct meta-textgeneration-llama-codellama-7b-instruct ml.g5.2xlarge 10000
CodeLlama-7b-Python meta-textgeneration-llama-codellama-7b-python ml.g5.2xlarge 10000
كود لاما-13ب meta-textgeneration-llama-codellama-13b ml.g5.12xlarge 32000
CodeLlama-13b-Instruct meta-textgeneration-llama-codellama-13b-instruct ml.g5.12xlarge 32000
CodeLlama-13b-Python meta-textgeneration-llama-codellama-13b-python ml.g5.12xlarge 32000
كود لاما-34ب meta-textgeneration-llama-codellama-34b ml.g5.48xlarge 48000
CodeLlama-34b-Instruct meta-textgeneration-llama-codellama-34b-instruct ml.g5.48xlarge 48000
CodeLlama-34b-Python meta-textgeneration-llama-codellama-34b-python ml.g5.48xlarge 48000

في حين تم تدريب نماذج Code Llama على طول سياق يصل إلى 16,000 رمز مميز، فقد أبلغت النماذج عن أداء جيد على نوافذ سياق أكبر. الحد الأقصى لعمود الرموز المميزة المدعومة في الجدول السابق هو الحد الأعلى لنافذة السياق المدعومة في نوع المثيل الافتراضي. نظرًا لأن نموذج Code Llama 7B يمكنه دعم 10,000 رمز مميز فقط على مثيل ml.g5.2xlarge، فإننا نوصي بنشر إصدار نموذج 13B أو 34B إذا كانت هناك حاجة إلى سياقات أكبر لتطبيقك.

بشكل افتراضي، تعمل كافة النماذج لمهام إنشاء التعليمات البرمجية. يستجيب كل من النموذجين الأساسي والإرشادي لمهام التنفيذ، على الرغم من أن النموذج الأساسي يتمتع بمخرجات ذات جودة أفضل بالنسبة لغالبية استعلامات العينة. وأخيرًا، تعمل نماذج التعليمات فقط على مهام التعليمات. يوضح الجدول التالي النماذج التي تتمتع بأداء جيد (جيد) وأداء متوسط ​​(معتدل) في أمثلة الاستعلامات في دفاتر الملاحظات التجريبية.

. رمز الجيل تعبئة الكود تعليمات الكود
كود لاما-7ب الخير الخير N / A
CodeLlama-7b-Instruct الخير معتدل الخير
CodeLlama-7b-Python الخير N / A N / A
كود لاما-13ب الخير الخير N / A
CodeLlama-13b-Instruct الخير معتدل الخير
CodeLlama-13b-Python الخير N / A N / A
كود لاما-34ب الخير N / A N / A
CodeLlama-34b-Instruct الخير N / A الخير
CodeLlama-34b-Python الخير N / A N / A

رمز الجيل

تم تشغيل الأمثلة التالية على نموذج CodeLlama-34b-Instruct مع معلمات الحمولة النافعة "parameters": {"max_new_tokens": 256, "temperature": 0.2, "top_p": 0.9}:

Input
import socket def ping_exponential_backoff(host: str): Output """ Ping a host using exponential backoff. """ for i in range(1, 10): try: socket.gethostbyname(host) return True except socket.gaierror: time.sleep(2 ** i) return False Input
import argparse def main(string: str): print(string) print(string[::-1]) if __name__ == "__main__": Output parser = argparse.ArgumentParser() parser.add_argument("string", help="String to be printed") args = parser.parse_args() main(args.string)

تعبئة الكود

تتضمن عملية ملء التعليمات البرمجية إرجاع التعليمات البرمجية التي تم إنشاؤها في ضوء السياق المحيط. وهذا يختلف عن مهمة إنشاء التعليمات البرمجية لأنه، بالإضافة إلى مقطع رمز البادئة، يتم تزويد النموذج أيضًا بلاحقة مقطع التعليمات البرمجية. تم استخدام رموز خاصة أثناء الضبط الدقيق لتحديد بداية البادئة (<PRE>)، بداية اللاحقة (<SUF>) ، وبداية الوسط (<MID>). يجب أن تكون تسلسلات الإدخال للنموذج بأحد التنسيقات التالية:

  • بادئة-لاحقة-الوسطى - <PRE> {prefix} <SUF>{suffix} <MID>
  • لاحقة البادئة الأوسط - <PRE> <SUF>{suffix} <MID> {prefix}

تستخدم الأمثلة التالية تنسيق البادئة واللاحقة الوسطى في نموذج CodeLlama-7b مع الحمولة parameters {"max_new_tokens": 256, "temperature": 0.05, "top_p": 0.9}:

Input
<PRE> def remove_non_ascii(s: str) -> str: """ <SUF> return result <MID> Output Remove non-ASCII characters from a string. :param s: The string to remove non-ASCII characters from. :return: The string with non-ASCII characters removed. """ result = "" for c in s: if ord(c) < 128: result += c Input
# Installation instructions: ```bash
<FILL> ```
This downloads the LLaMA inference code and installs the repository as a local pip package. Output git clone https://github.com/LLaMA-AI/LLaMA-inference.git cd LLaMA-inference pip install -e . Input
class InterfaceManagerFactory(AbstractManagerFactory): def __init__(<FILL>
def main(): factory = InterfaceManagerFactory(start=datetime.now()) managers = [] for i in range(10): managers.append(factory.build(id=i)) Output
self, start=None): self.start = start def build(self, id): return InterfaceManager(id, self.start) Input
/-- A quasi-prefunctoid is 1-connected iff all its etalisations are 1-connected. -/
theorem connected_iff_etalisation [C D : precategoroid] (P : quasi_prefunctoid C D) : π₁ P = 0 ↔ <FILL> = 0 :=
begin split, { intros h f, rw pi_1_etalisation at h, simp [h], refl }, { intro h, have := @quasi_adjoint C D P, simp [←pi_1_etalisation, this, h], refl }
end Output
∀ f : C ⟶ D, π₁ (P.etalise f)

تعليمات الكود

قدمت Meta أيضًا إصدارًا مضبوطًا للتعليمات من Code Llama. لا يمكن تطبيق نماذج الاستعلامات في هذا القسم إلا على نماذج Code Llama التي تم ضبطها للتعليمات، وهي النماذج التي تحتوي على لاحقة تعليمات لمعرف النموذج. تنسيق Code Llama للتعليمات هو نفس تنسيق المطالبة Llama-2-chat، والذي نوضحه بالتفصيل نماذج Llama 2 الأساسية متاحة الآن في SageMaker JumpStart

قد تبدو مطالبة المستخدم البسيطة كما يلي:

<s>[INST] {user_prompt} [/INST]

يمكنك أيضًا إضافة موجه النظام بالصيغة التالية:

<s>[INST] <<SYS>>
{system_prompt}
<</SYS>> {user_prompt} [/INST]

أخيرًا، يمكنك إجراء تفاعل تحادثي مع النموذج من خلال تضمين جميع مطالبات المستخدم السابقة واستجابات المساعد في الإدخال:

<s>[INST] <<SYS>>
{system_prompt}
<</SYS>> {user_prompt_1} [/INST] {assistant_response_1} </s><s>[INST] {user_prompt_1} [/INST]

تم تشغيل هذه الأمثلة على نموذج CodeLlama-13b-Instruct مع معلمات الحمولة النافعة "المعلمات": {"max_new_tokens": 512, "temperature": 0.2, "top_p": 0.9}:

Input
<s>[INST] In Bash, how do I list all text files in the current directory (excluding subdirectories) that have been modified in the last month? [/INST] Output You can use the `find` command in Bash to list all text files in the current directory (excluding subdirectories) that have been modified in the last month. Here's an example command:
```
find . -type f -name "*.txt" -mtime -30
```
Here's a breakdown of the command: * `find .`: This tells `find` to search the current directory and all its subdirectories.
* `-type f`: This tells `find` to only search for files (not directories).
* `-name "*.txt"`: This tells `find` to only search for files with the `.txt` extension.
* `-mtime -30`: This tells `find` to only search for files that have been modified in the last 30 days (2,592,000 seconds). The output of the command will be a list of all text files in the current directory (excluding subdirectories) that have been modified in the last month. Input
<s>[INST] What is the difference between inorder and preorder traversal? Give an example in Python. [/INST] Output Inorder and preorder traversal are two different ways of traversing a binary tree. Inorder traversal is a way of visiting the nodes of a binary tree in a specific order. In an inorder traversal, the left subtree is visited first, then the current node, and finally the right subtree is visited. This means that the nodes are visited in a left-to-right, top-to-bottom order. Preorder traversal, on the other hand, is a way of visiting the nodes of a binary tree in a different order. In a preorder traversal, the current node is visited first, followed by the left subtree, and finally the right subtree. This means that the nodes are visited in a top-down, left-to-right order. Here is an example of an inorder traversal of a binary tree in Python:
```
def inorder_traversal(root): if root is None: return [] return inorder_traversal(root.left) + [root.val] + inorder_traversal(root.right)
```
And here is an example of a preorder traversal of a binary tree in Python:
```
def preorder_traversal(root): if root is None: return [] return [root.val] + preorder_traversal(root.left) + preorder_traversal(root.right)
```
In this example, the `inorder_traversal` function returns a list of the values in the tree in the order of the keys, from smallest to largest. The `preorder_traversal` function returns a list of the values in the tree in the order of the keys, but with the current node visited before its children. Input
<s>[INST] <<SYS>>
Provide answers in JavaScript
<</SYS>> Write a function that computes the set of sums of all contiguous sublists of a given list. [/INST] Output function contiguousSublistSums(list) { let sums = []; for (let i = 0; i < list.length; i++) { let sum = 0; for (let j = i; j < list.length; j++) { sum += list[j]; sums.push(sum); } } return sums;
} console.log(contiguousSublistSums([1, 2, 3, 4, 5])); // [1, 3, 6, 10, 15]
console.log(contiguousSublistSums([1, 2, 3, 4, 5, 6])); // [1, 3, 6, 10, 15, 21]
console.log(contiguousSublistSums([1, 2, 3, 4, 5, 6, 7])); // [1, 3, 6, 10, 15, 21, 28]
console.log(contiguousSublistSums([1, 2, 3, 4, 5, 6, 7, 8])); // [1, 3, 6, 10, 15, 21, 28, 36]
console.log(contiguousSublistSums([1, 2, 3, 4, 5, 6, 7, 8, 9])); // [1, 3, 6, 10, 15, 21, 28, 36, 45]

تنظيف

بعد الانتهاء من تشغيل دفتر الملاحظات، تأكد من حذف كافة الموارد التي قمت بإنشائها في العملية حتى يتم إيقاف الفوترة. استخدم الكود التالي:

predictor.delete_model()
predictor.delete_endpoint()

وفي الختام

في هذا المنشور، أوضحنا لك كيفية البدء باستخدام نماذج Code Llama في SageMaker Studio ونشر النموذج لإنشاء التعليمات البرمجية واللغة الطبيعية حول التعليمات البرمجية من كل من التعليمات البرمجية ومطالبات اللغة الطبيعية. نظرًا لأن النماذج الأساسية تم تدريبها مسبقًا، فيمكنها المساعدة في تقليل تكاليف التدريب والبنية التحتية وتمكين التخصيص لحالة الاستخدام الخاصة بك. تفضل بزيارة SageMaker JumpStart في SageMaker Studio الآن للبدء.

الموارد


عن المؤلفين


غابرييل سينايف
هو مدير أبحاث في فريق Facebook AI Research (FAIR) في Meta. قبل انضمامه إلى ميتا، كان غابرييل زميلًا لما بعد الدكتوراه في فريق إيمانويل دوبو في مدرسة الأساتذة العليا في باريس، حيث عمل على الهندسة العكسية لاكتساب اللغة عند الأطفال. حصل غابرييل على درجة الدكتوراه في النمذجة الافتراضية المطبقة على الألعاب الإستراتيجية في الوقت الفعلي (الذكاء الاصطناعي) من جامعة غرونوبل.

عيسى جميل هو مهندس شريك RL في الذكاء الاصطناعي التوليدي في Meta.

دكتور كايل أولريش هو عالم تطبيقي مع فريق Amazon SageMaker JumpStart. تشمل اهتماماته البحثية خوارزميات التعلم الآلي القابلة للتطوير ، والرؤية الحاسوبية ، والسلاسل الزمنية ، والمعاملات البايزية غير البارامترية ، والعمليات الغاوسية. حصل على درجة الدكتوراه من جامعة ديوك وقد نشر أبحاثًا في NeurIPS و Cell و Neuron.

د. أشيش خيتان هو عالم تطبيقي أقدم في Amazon SageMaker JumpStart ويساعد في تطوير خوارزميات التعلم الآلي. حصل على الدكتوراه من جامعة إلينوي في أوربانا شامبين. وهو باحث نشط في التعلم الآلي والاستدلال الإحصائي ، وقد نشر العديد من الأوراق البحثية في مؤتمرات NeurIPS و ICML و ICLR و JMLR و ACL و EMNLP.

فيفيك سينغ هو مدير منتج لدى SageMaker JumpStart. وهو يركز على تمكين العملاء من الانضمام إلى SageMaker JumpStart لتبسيط وتسريع رحلة التعلم الآلي الخاصة بهم لبناء تطبيقات الذكاء الاصطناعي التوليدية.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة