Zephyrnet-logo

Code Llama-codegeneratiemodellen van Meta zijn nu beschikbaar via Amazon SageMaker JumpStart | Amazon-webservices

Datum:

Vandaag zijn we verheugd om aan te kondigen dat Code Llama-basismodellen, ontwikkeld door Meta, beschikbaar zijn voor klanten via Amazon SageMaker JumpStart te implementeren met één klik voor het uitvoeren van gevolgtrekkingen. Code Llama is een geavanceerd groottaalmodel (LLM) dat code en natuurlijke taal over code kan genereren op basis van zowel code- als natuurlijke taalprompts. Code Llama is gratis voor onderzoek en commercieel gebruik. U kunt dit model uitproberen met SageMaker JumpStart, een machine learning (ML)-hub die toegang biedt tot algoritmen, modellen en ML-oplossingen, zodat u snel aan de slag kunt met ML. In dit bericht bekijken we hoe u het Code Llama-model kunt ontdekken en implementeren via SageMaker JumpStart.

Wat is Code Lama

Code Llama is een model uitgebracht door meta dat bovenop Llama 2 is gebouwd en een geavanceerd model is dat is ontworpen om de productiviteit van programmeertaken voor ontwikkelaars te verbeteren door hen te helpen hoogwaardige, goed gedocumenteerde code te creëren. De modellen tonen state-of-the-art prestaties in Python, C++, Java, PHP, C#, TypeScript en Bash, en hebben het potentieel om ontwikkelaars tijd te besparen en softwareworkflows efficiënter te maken. Het wordt geleverd in drie varianten, ontworpen om een ​​breed scala aan toepassingen te dekken: het basismodel (Code Llama), een gespecialiseerd Python-model (Code Llama-Python) en een instructievolgend model voor het begrijpen van instructies in natuurlijke taal (Code Llama-Instruct ). Alle Code Llama-varianten zijn verkrijgbaar in drie maten: 7B-, 13B- en 34B-parameters. De basis- en instructievarianten 7B en 13B ondersteunen het invullen op basis van omringende inhoud, waardoor ze ideaal zijn voor code-assistenttoepassingen.

De modellen zijn ontworpen met Llama 2 als basis en vervolgens getraind op 500 miljard tokens aan codegegevens, waarbij de gespecialiseerde Python-versie is getraind op incrementeel 100 miljard tokens. De Code Llama-modellen bieden stabiele generaties met maximaal 100,000 tokens aan context. Alle modellen zijn getraind op reeksen van 16,000 tokens en tonen verbeteringen bij invoer met maximaal 100,000 tokens.

Het model wordt onder dezelfde versie beschikbaar gesteld gemeenschapslicentie als Llama 2.

Wat is SageMaker JumpStart

Met SageMaker JumpStart kunnen ML-beoefenaars kiezen uit een groeiende lijst met best presterende basismodellen. ML-beoefenaars kunnen basismodellen inzetten voor specifieke toepassingen Amazon Sage Maker instances binnen een netwerkgeïsoleerde omgeving en pas modellen aan met SageMaker voor modeltraining en implementatie.

U kunt Code Llama-modellen nu met een paar klikken ontdekken en implementeren Amazon SageMaker Studio of programmatisch via de SageMaker Python SDK, zodat u modelprestaties en MLOps-besturingselementen kunt afleiden met SageMaker-functies zoals Amazon SageMaker-pijpleidingen, Amazon SageMaker-foutopsporingof containerlogboeken. Het model wordt geïmplementeerd in een AWS-beveiligde omgeving en onder uw VPC-controle, waardoor de gegevensbeveiliging wordt gewaarborgd. Code Llama-modellen zijn vindbaar en kunnen worden ingezet in de regio's VS-Oost (N. Virginia), VS-West (Oregon) en Europa (Ierland).

Klanten moeten de EULA accepteren om modelvisum SageMaker SDK te implementeren.

Ontdek modellen

U hebt toegang tot Code Llama-basismodellen via SageMaker JumpStart in de gebruikersinterface van SageMaker Studio en de SageMaker Python SDK. In deze sectie bespreken we hoe u de modellen in SageMaker Studio kunt ontdekken.

SageMaker Studio is een geïntegreerde ontwikkelomgeving (IDE) die een enkele webgebaseerde visuele interface biedt waar u toegang hebt tot speciaal gebouwde tools om alle ML-ontwikkelingsstappen uit te voeren, van het voorbereiden van gegevens tot het bouwen, trainen en implementeren van uw ML-modellen. Raadpleeg voor meer informatie over hoe u aan de slag kunt gaan en SageMaker Studio kunt instellen Amazon SageMaker Studio.

In SageMaker Studio heeft u toegang tot SageMaker JumpStart, dat vooraf getrainde modellen, notebooks en vooraf gebouwde oplossingen bevat onder Kant-en-klare en geautomatiseerde oplossingen.

Op de startpagina van SageMaker JumpStart kunt u zoeken naar oplossingen, modellen, notebooks en andere bronnen. Je kunt Code Llama-modellen vinden in de Basismodellen: tekstgeneratie carrousel

Door te kiezen, kunt u ook andere modelvarianten vinden Ontdek alle modellen voor tekstgeneratie of zoeken naar Code Llama.

U kunt de modelkaart kiezen om details over het model te bekijken, zoals licentie, gegevens die zijn gebruikt om te trainen en hoe u deze moet gebruiken. U vindt ook twee knoppen, Implementeren en Notitieblok openen, waarmee u het model kunt gebruiken.

Implementeren

Wanneer je kiest Implementeren en accepteer de voorwaarden, de implementatie zal starten. U kunt ook via het voorbeeldnotebook implementeren door te kiezen Notitieblok openen. Het voorbeeldnotebook dat end-to-end richtlijnen biedt voor het implementeren van het model voor gevolgtrekking en het opschonen van bronnen.

Om te implementeren met behulp van een notebook, beginnen we met het selecteren van een geschikt model, gespecificeerd door de model_id. U kunt elk van de geselecteerde modellen op SageMaker implementeren met de volgende code:

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

Dit implementeert het model op SageMaker met standaardconfiguraties, inclusief standaard instantietype en standaard VPC-configuraties. U kunt deze configuraties wijzigen door niet-standaardwaarden op te geven in JumpStart-model. Nadat het is geïmplementeerd, kunt u deductie uitvoeren tegen het geïmplementeerde eindpunt via de SageMaker-voorspeller:

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")

Merk op dat standaard accept_eula is ingesteld op false. Je moet instellen accept_eula=true om het eindpunt met succes aan te roepen. Door dit te doen, accepteert u de gebruikerslicentieovereenkomst en het beleid voor acceptabel gebruik zoals eerder vermeld. Je kan ook Download de licentieovereenkomst.

Custom_attributes gebruikt om de EULA door te geven zijn sleutel/waarde-paren. De sleutel en waarde worden gescheiden door = en paren worden gescheiden door ;. Als de gebruiker dezelfde sleutel meerdere keren doorgeeft, wordt de laatste waarde bewaard en doorgegeven aan de scripthandler (in dit geval gebruikt voor voorwaardelijke logica). Bijvoorbeeld als accept_eula=false; accept_eula=true wordt vervolgens doorgegeven aan de server accept_eula=true wordt bewaard en doorgegeven aan de scripthandler.

Inferentieparameters regelen het proces voor het genereren van tekst op het eindpunt. De maximale controle over nieuwe tokens verwijst naar de grootte van de uitvoer die door het model wordt gegenereerd. Merk op dat dit niet hetzelfde is als het aantal woorden, omdat het vocabulaire van het model niet hetzelfde is als het Engelse vocabulaire en elk token mogelijk geen Engelstalig woord is. Temperatuur regelt de willekeur in de uitvoer. Hogere temperaturen resulteren in meer creatieve en hallucinerende resultaten. Alle inferentieparameters zijn optioneel.

De volgende tabel bevat alle Code Llama-modellen die beschikbaar zijn in SageMaker JumpStart, samen met de model-ID's, standaardinstantietypen en de maximaal ondersteunde tokens (som van het aantal invoertokens en het aantal gegenereerde tokens voor alle gelijktijdige verzoeken) die worden ondersteund voor elk van deze modellen.

Modelnaam Model ID Standaard instantietype Maximaal ondersteunde tokens
CodeLlama-7b meta-textgeneration-llama-codellama-7b ml.g5.2xgroot 10000
CodeLlama-7b-Instrueer meta-textgeneration-llama-codellama-7b-instruct ml.g5.2xgroot 10000
CodeLlama-7b-Python meta-textgeneration-llama-codellama-7b-python ml.g5.2xgroot 10000
CodeLlama-13b meta-textgeneration-llama-codellama-13b ml.g5.12xgroot 32000
CodeLlama-13b-Instrueer meta-textgeneration-llama-codellama-13b-instruct ml.g5.12xgroot 32000
CodeLlama-13b-Python meta-textgeneration-llama-codellama-13b-python ml.g5.12xgroot 32000
CodeLlama-34b meta-textgeneration-llama-codellama-34b ml.g5.48xgroot 48000
CodeLlama-34b-Instrueer meta-textgeneration-llama-codellama-34b-instruct ml.g5.48xgroot 48000
CodeLlama-34b-Python meta-textgeneration-llama-codellama-34b-python ml.g5.48xgroot 48000

Terwijl de Code Llama-modellen werden getraind op een contextlengte van 16,000 tokens, rapporteerden de modellen goede prestaties op nog grotere contextvensters. De kolom met maximaal ondersteunde tokens in de voorgaande tabel is de bovengrens van het ondersteunde contextvenster op het standaardinstantietype. Omdat het Code Llama 7B-model slechts 10,000 tokens op een ml.g5.2xlarge-instantie kan ondersteunen, raden we u aan een 13B- of 34B-modelversie te implementeren als grotere contexten vereist zijn voor uw toepassing.

Standaard werken alle modellen voor taken voor het genereren van code. Het basis- en instructiemodel reageren beide op invultaken, hoewel het basismodel voor de meeste voorbeeldquery's een betere uitvoerkwaliteit had. Ten slotte werken alleen instructiemodellen aan instructietaken. In de volgende tabel ziet u welke modellen goede prestaties (goed) en matige prestaties (matig) hadden bij voorbeeldquery's in de demonotebooks.

. Code genereren Code-invulling Codeer instructies
CodeLlama-7b Goed Goed NB
CodeLlama-7b-Instrueer Goed Matig Goed
CodeLlama-7b-Python Goed NB NB
CodeLlama-13b Goed Goed NB
CodeLlama-13b-Instrueer Goed Matig Goed
CodeLlama-13b-Python Goed NB NB
CodeLlama-34b Goed NB NB
CodeLlama-34b-Instrueer Goed NB Goed
CodeLlama-34b-Python Goed NB NB

Codegeneratie

De volgende voorbeelden zijn uitgevoerd op het CodeLlama-34b-Instruct-model met payload-parameters "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)

Code-invulling

Code-invulling houdt in dat de gegenereerde code wordt geretourneerd, gegeven de omringende context. Dit verschilt van de codegeneratietaak omdat het model naast een prefix-codesegment ook wordt voorzien van een codesegment-suffix. Tijdens het afstemmen werden speciale tokens gebruikt om het begin van het voorvoegsel te markeren (<PRE>), het begin van het achtervoegsel (<SUF>), en het begin van het midden (<MID>). Invoerreeksen voor het model moeten een van de volgende formaten hebben:

  • voorvoegsel-achtervoegsel-midden - <PRE> {prefix} <SUF>{suffix} <MID>
  • achtervoegsel-voorvoegsel-midden - <PRE> <SUF>{suffix} <MID> {prefix}

De volgende voorbeelden gebruiken de indeling voorvoegsel-achtervoegsel-midden op het CodeLlama-7b-model met payload 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)

Codeer instructies

Meta leverde ook een instructie-afgestemde variant van Code Llama. Voorbeeldquery's in deze sectie kunnen alleen worden toegepast op deze op instructies afgestemde Code Llama-modellen. Dit zijn de modellen met een model-ID-instructieachtervoegsel. Het Code Llama-formaat voor instructies is hetzelfde als het Llama-2-chat-promptformaat, dat we gedetailleerd beschrijven in Llama 2-basismodellen zijn nu beschikbaar in SageMaker JumpStart

Een eenvoudige gebruikersprompt kan er als volgt uitzien:

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

U kunt ook een systeemprompt toevoegen met de volgende syntaxis:

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

Ten slotte kunt u een conversatie-interactie met het model voeren door alle eerdere gebruikersprompts en assistent-reacties in de invoer op te nemen:

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

Deze voorbeelden zijn uitgevoerd op het CodeLlama-13b-Instruct-model met payload-parameters “parameters”: {"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]

Opruimen

Nadat u klaar bent met het uitvoeren van de notebook, moet u ervoor zorgen dat u alle bronnen verwijdert die u tijdens het proces hebt gemaakt, zodat de facturering wordt stopgezet. Gebruik de volgende code:

predictor.delete_model()
predictor.delete_endpoint()

Conclusie

In dit bericht hebben we u laten zien hoe u aan de slag kunt gaan met Code Llama-modellen in SageMaker Studio en hoe u het model kunt implementeren voor het genereren van code en natuurlijke taal over code op basis van zowel code- als natuurlijke taalprompts. Omdat basismodellen vooraf zijn getraind, kunnen ze de training- en infrastructuurkosten helpen verlagen en maatwerk voor uw gebruiksscenario mogelijk maken. Bezoek nu SageMaker JumpStart in SageMaker Studio om aan de slag te gaan.

Resources


Over de auteurs


Gabriël Synnaeve
is onderzoeksdirecteur bij het Facebook AI Research (FAIR)-team van Meta. Voordat hij bij Meta kwam, was Gabriel een postdoctoraal onderzoeker in het team van Emmanuel Dupoux aan de École Normale Supérieure in Parijs, waar hij werkte aan reverse-engineering van de taalverwerving bij baby's. Gabriel behaalde zijn doctoraat in Bayesiaanse modellering toegepast op real-time strategiespellen AI aan de Universiteit van Grenoble.

Eissa Jamil is een Partner Engineer RL, Generatieve AI bij Meta.

Dr Kyle Ulrich is een Applied Scientist bij het Amazon SageMaker JumpStart-team. Zijn onderzoeksinteresses omvatten schaalbare machine learning-algoritmen, computervisie, tijdreeksen, Bayesiaanse niet-parametrische gegevens en Gaussiaanse processen. Zijn PhD is van Duke University en hij heeft artikelen gepubliceerd in NeurIPS, Cell en Neuron.

Dr Ashish Khetan is een Senior Applied Scientist bij Amazon SageMaker JumpStart en helpt bij het ontwikkelen van machine learning-algoritmen. Hij promoveerde aan de Universiteit van Illinois in Urbana-Champaign. Hij is een actief onderzoeker op het gebied van machine learning en statistische inferentie, en heeft veel artikelen gepubliceerd op NeurIPS-, ICML-, ICLR-, JMLR-, ACL- en EMNLP-conferenties.

Vivek Singh is productmanager bij SageMaker JumpStart. Hij richt zich erop klanten in staat te stellen SageMaker JumpStart te gebruiken om hun ML-traject te vereenvoudigen en te versnellen om generatieve AI-applicaties te bouwen.

spot_img

Laatste intelligentie

spot_img