Generatiivinen tiedustelu

Metan Code Llama -koodin sukupolvimallit ovat nyt saatavilla Amazon SageMaker JumpStart |:n kautta Amazon Web Services

Treffi:

Tänään olemme iloisia voidessamme ilmoittaa, että Metan kehittämät Code Llama -meikkipohjamallit ovat asiakkaiden saatavilla kautta Amazon SageMaker JumpStart ottaa käyttöön yhdellä napsautuksella päättelyn suorittamiseksi. Code Llama on huippuluokan kielimalli (LLM), joka pystyy tuottamaan koodia ja luonnollista kieltä koodista sekä koodin että luonnollisen kielen kehotteista. Code Llama on ilmainen tutkimus- ja kaupalliseen käyttöön. Voit kokeilla tätä mallia SageMaker JumpStartilla, koneoppimiskeskuksella (ML), joka tarjoaa pääsyn algoritmeihin, malleihin ja ML-ratkaisuihin, jotta voit nopeasti aloittaa ML:n käytön. Tässä viestissä käymme läpi Code Llama -mallin löytämisen ja käyttöönoton SageMaker JumpStartin kautta.

Mikä on Code Llama

Code Llama on malli, jonka on julkaissut Meta joka on rakennettu Llama 2:n päälle ja on huippuluokan malli, joka on suunniteltu parantamaan kehittäjien ohjelmointitehtävien tuottavuutta auttamalla heitä luomaan korkealaatuista, hyvin dokumentoitua koodia. Mallit osoittavat huippuluokan suorituskykyä Pythonissa, C++:ssa, Javassa, PHP:ssä, C#:ssa, TypeScriptissä ja Bashissa, ja ne voivat säästää kehittäjien aikaa ja tehostaa ohjelmistojen työnkulkua. Sitä on saatavilla kolmessa eri versiossa, jotka on suunniteltu kattamaan monenlaisia ​​sovelluksia: perusmalli (Code Llama), Python-erikoismalli (Code Llama-Python) ja ohjeita seuraava malli luonnollisen kielen ohjeiden ymmärtämiseen (Code Llama-Instruct). ). Kaikista Code Llama -versioista on kolme kokoa: 7B, 13B ja 34B parametrit. 7B- ja 13B-kanta- ja ohjeversiot tukevat täyttöä ympäröivän sisällön perusteella, joten ne sopivat ihanteellisesti koodiavustajasovelluksiin.

Mallit suunniteltiin käyttämällä Llama 2:ta pohjana, ja sitten niitä harjoiteltiin 500 miljardilla koodidatan tunnisteella, ja Python-erikoisversio oli koulutettu 100 miljardin lisätokenin avulla. Code Llama -mallit tarjoavat vakaat sukupolvet, joissa on jopa 100,000 16,000 kontekstimerkkiä. Kaikki mallit on koulutettu 100,000 XNUMX merkin sarjoihin, ja niissä on parannuksia jopa XNUMX XNUMX tunnuksella.

Malli on saatavilla samalla alla yhteisön lisenssi nimellä Llama 2.

Mikä on SageMaker JumpStart

SageMaker JumpStartin avulla ML-harjoittajat voivat valita kasvavasta luettelosta parhaiten suoriutuvia meikkipohjamalleja. ML-ammattilaiset voivat ottaa käyttöön perustamismalleja omistettuihin Amazon Sage Maker instansseja verkosta eristetyssä ympäristössä ja mukauta malleja SageMakerin avulla mallin koulutusta ja käyttöönottoa varten.

Voit nyt löytää ja ottaa käyttöön Code Llama -malleja muutamalla napsautuksella Amazon SageMaker Studio tai ohjelmallisesti SageMaker Python SDK:n kautta, jonka avulla voit johtaa mallin suorituskykyä ja MLOps-säätimiä SageMaker-ominaisuuksilla, kuten Amazon SageMaker -putkistot, Amazon SageMaker -korjaamotai konttitukkeja. Malli on otettu käyttöön suojatussa AWS-ympäristössä ja VPC-ohjaimissasi, mikä auttaa varmistamaan tietoturvan. Code Llama -mallit ovat löydettävissä ja niitä voidaan ottaa käyttöön USA:n itäosassa (N. Virginia), Yhdysvaltain lännessä (Oregon) ja Euroopassa (Irlanti).

Asiakkaiden on hyväksyttävä EULA voidakseen ottaa malliviisumi SageMaker SDK:n käyttöön.

Tutustu malleihin

Voit käyttää Code Llama -perusmallien SageMaker JumpStartin kautta SageMaker Studion käyttöliittymässä ja SageMaker Python SDK:ssa. Tässä osiossa käymme läpi kuinka löytää mallit SageMaker Studiossa.

SageMaker Studio on integroitu kehitysympäristö (IDE), joka tarjoaa yhden web-pohjaisen visuaalisen käyttöliittymän, jossa voit käyttää tarkoitukseen rakennettuja työkaluja kaikkien ML-kehitysvaiheiden suorittamiseen tietojen valmistelusta ML-mallien rakentamiseen, koulutukseen ja käyttöönottoon. Katso lisätietoja SageMaker Studion aloittamisesta ja määrittämisestä Amazon SageMaker Studio.

SageMaker Studiossa voit käyttää SageMaker JumpStartia, joka sisältää valmiiksi koulutetut mallit, muistikirjat ja valmiiksi rakennetut ratkaisut. Valmiiksi rakennetut ja automatisoidut ratkaisut.

SageMaker JumpStart -aloitussivulla voit selata ratkaisuja, malleja, muistikirjoja ja muita resursseja. Löydät Code Llama -malleja osoitteesta Perusmallit: Tekstin luominen karuselli.

Voit etsiä myös muita mallivaihtoehtoja valitsemalla Tutustu kaikkiin tekstinluontimalleihin tai etsit Code Llamaa.

Voit valita mallikortin nähdäksesi mallin tiedot, kuten lisenssin, koulutuksessa käytetyt tiedot ja käytön. Löydät myös kaksi painiketta, Sijoittaa ja Avaa Muistikirja, joka auttaa sinua käyttämään mallia.

Sijoittaa

Kun valitset Sijoittaa ja hyväksy ehdot, käyttöönotto alkaa. Vaihtoehtoisesti voit ottaa käyttöön esimerkkimuistikirjan kautta valitsemalla Avaa Muistikirja. Esimerkkimuistikirja, joka tarjoaa päästä päähän -ohjeet mallin käyttöönotosta päätelmien tekemiseen ja resurssien puhdistamiseen.

Ottaaksesi käyttöön kannettavan tietokoneen, aloitamme valitsemalla sopivan mallin, jonka määrittelee model_id. Voit ottaa käyttöön mitä tahansa valituista malleista SageMakerissa seuraavalla koodilla:

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

Tämä ottaa mallin käyttöön SageMakerissa oletuskokoonpanoilla, mukaan lukien oletusinstanssityypit ja oletusarvoiset VPC-kokoonpanot. Voit muuttaa näitä määrityksiä määrittämällä ei-oletusarvoja JumpStartModel. Kun se on otettu käyttöön, voit suorittaa päättelyn käyttöön otettua päätepistettä vastaan ​​SageMaker-ennustajan kautta:

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

Huomaa, että oletuksena accept_eula asetetaan false. Sinun on asetettava accept_eula=true kutsua päätepiste onnistuneesti. Näin tekemällä hyväksyt aiemmin mainitun käyttöoikeussopimuksen ja hyväksyttävän käyttökäytännön. Voit myös download lisenssisopimus.

Custom_attributes EULA:n läpäisemiseen käytetään avain/arvo-pareja. Avain ja arvo erotetaan merkillä = ja parit erotetaan merkillä ;. Jos käyttäjä välittää saman avaimen useammin kuin kerran, viimeinen arvo säilytetään ja välitetään komentosarjan käsittelijälle (tässä tapauksessa käytetään ehdolliseen logiikkaan). Esimerkiksi jos accept_eula=false; accept_eula=true siirretään sitten palvelimelle accept_eula=true säilytetään ja välitetään komentosarjan käsittelijälle.

Päätelmäparametrit ohjaavat tekstin luontiprosessia päätepisteessä. Uusien tokenien maksimiohjaus viittaa mallin tuottaman lähdön kokoon. Huomaa, että tämä ei ole sama kuin sanojen määrä, koska mallin sanasto ei ole sama kuin englannin kielen sanasto, ja jokainen merkki ei välttämättä ole englanninkielinen sana. Lämpötila ohjaa lähdön satunnaisuutta. Korkeampi lämpötila johtaa luovempiin ja hallusinoituneempiin tuloksiin. Kaikki päättelyparametrit ovat valinnaisia.

Seuraavassa taulukossa luetellaan kaikki Code Llama -mallit, jotka ovat saatavilla SageMaker JumpStartissa, sekä mallitunnukset, oletusilmentymien tyypit ja enimmäistuetut tunnisteet (syöttötunnusten lukumäärän ja luotujen tunnisteiden lukumäärän summa kaikille samanaikaisille pyynnöille). näitä malleja.

Mallin nimi Model ID Oletusinstanssityyppi Maksimi tuetut tokenit
CodeLlama-7b meta-textgeneration-lama-codellama-7b ml.g5.2xsuuri 10000
CodeLlama-7b-Ohje meta-textgeneration-llama-codellama-7b-ohje ml.g5.2xsuuri 10000
CodeLlama-7b-Python meta-textgeneration-llama-codellama-7b-python ml.g5.2xsuuri 10000
CodeLlama-13b meta-textgeneration-lama-codellama-13b ml.g5.12xsuuri 32000
CodeLlama-13b-Ohje meta-textgeneration-llama-codellama-13b-ohje ml.g5.12xsuuri 32000
CodeLlama-13b-Python meta-textgeneration-llama-codellama-13b-python ml.g5.12xsuuri 32000
CodeLlama-34b meta-textgeneration-lama-codellama-34b ml.g5.48xsuuri 48000
CodeLlama-34b-Ohje meta-textgeneration-llama-codellama-34b-ohje ml.g5.48xsuuri 48000
CodeLlama-34b-Python meta-textgeneration-llama-codellama-34b-python ml.g5.48xsuuri 48000

Vaikka Code Llama -malleja koulutettiin 16,000 7 tunnuksen kontekstipituudella, mallit ovat raportoineet hyvästä suorituskyvystä vielä suuremmissa kontekstiikkunoissa. Edellisessä taulukossa tuettujen merkkien enimmäismäärä on oletusilmentymän tyypin tuetun kontekstiikkunan yläraja. Koska Code Llama 10,000B -malli tukee vain 5.2 13 merkkiä ml.g34xlarge-esiintymässä, suosittelemme XNUMXB- tai XNUMXB-malliversion käyttöönottoa, jos sovelluksessasi tarvitaan suurempia konteksteja.

Oletuksena kaikki mallit toimivat koodin luontitehtävissä. Sekä perus- että ohjemallit vastaavat täyttötehtäviin, vaikka perusmallilla olikin parempi laatu useimmille näytekyselyille. Lopuksi, vain ohjemallit toimivat ohjetehtävissä. Seuraava taulukko havainnollistaa, millä malleilla oli hyvä suorituskyky (Good) ja kohtalainen suorituskyky (Keskitaso) esittelymuistikirjojen esimerkkikyselyissä.

. Koodin luominen Koodin täyttö Ohjeet koodiin
CodeLlama-7b hyvä hyvä N / A
CodeLlama-7b-Ohje hyvä kohtalainen hyvä
CodeLlama-7b-Python hyvä N / A N / A
CodeLlama-13b hyvä hyvä N / A
CodeLlama-13b-Ohje hyvä kohtalainen hyvä
CodeLlama-13b-Python hyvä N / A N / A
CodeLlama-34b hyvä N / A N / A
CodeLlama-34b-Ohje hyvä N / A hyvä
CodeLlama-34b-Python hyvä N / A N / A

Koodin luonti

Seuraavat esimerkit ajettiin CodeLlama-34b-Instruct-mallilla hyötykuormaparametreilla "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)

Koodin täyttö

Koodin täyttö tarkoittaa luodun koodin palauttamista ympäröivässä kontekstissa. Tämä eroaa koodin luontitehtävästä, koska mallissa on etuliitekoodisegmentin lisäksi myös koodisegmentin pääte. Hienosäädön aikana käytettiin erityisiä tunnuksia merkitsemään etuliitteen (<PRE>), päätteen alku (<SUF>), ja keskikohdan alku (<MID>). Mallin syöttösekvenssien tulee olla jossakin seuraavista muodoista:

  • etuliite-liite-keski - <PRE> {prefix} <SUF>{suffix} <MID>
  • pääte-etuliite-keski - <PRE> <SUF>{suffix} <MID> {prefix}

Seuraavissa esimerkeissä käytetään prefix-suffix-middle-muotoa CodeLlama-7b-mallissa hyötykuormalla 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)

Ohjeet koodiin

Meta toimitti myös ohjeistetun version Code Llamasta. Tämän osion esimerkkikyselyitä voidaan soveltaa vain näihin käskyviritettyihin Code Llama -malleihin, jotka ovat malleja, joissa on mallitunnuksen käskypääte. Ohjeiden Code Llama -muoto on sama kuin Llama-2-chat-kehotteen muoto, josta kerromme tarkemmin Llama 2 -pohjamallit ovat nyt saatavilla SageMaker JumpStartissa

Yksinkertainen käyttäjäkehote voi näyttää tältä:

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

Voit myös lisätä järjestelmäkehotteen seuraavalla syntaksilla:

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

Lopuksi voit käydä keskustelua mallin kanssa sisällyttämällä syötteeseen kaikki aiemmat käyttäjän kehotteet ja avustajan vastaukset:

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

Nämä esimerkit ajettiin CodeLlama-13b-Instruct-mallilla hyötykuormaparametreilla "parametrit": {"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]

Puhdistaa

Kun olet lopettanut muistikirjan käyttämisen, muista poistaa kaikki prosessissa luomasi resurssit, jotta laskutuksesi lopetetaan. Käytä seuraavaa koodia:

predictor.delete_model()
predictor.delete_endpoint()

Yhteenveto

Tässä viestissä näytimme sinulle, kuinka pääset alkuun Code Llama -mallien kanssa SageMaker Studiossa ja otat käyttöön mallin koodin ja luonnollisen kielen luomiseksi koodista sekä koodin että luonnollisen kielen kehotteista. Koska perusmallit ovat valmiiksi koulutettuja, ne voivat auttaa alentamaan koulutus- ja infrastruktuurikustannuksia ja mahdollistaa räätälöinnin käyttötilanteeseesi. Aloita käymällä SageMaker JumpStartissa SageMaker Studiossa nyt.

Esittelymateriaalit


Tietoja kirjoittajista


Gabriel Synnaeve
on tutkimusjohtaja Facebook AI Research (FAIR) -tiimissä Metassa. Ennen metaa Gabriel työskenteli tutkijatohtorina Emmanuel Dupoux'n tiimissä École Normale Supérieuressa Pariisissa ja työskenteli vauvojen kielen oppimisen käänteissuunnittelussa. Gabriel väitteli tohtorintutkinnon reaaliaikaisten strategiapelien tekoälyyn sovelletusta Bayesian mallintamisesta Grenoblen yliopistosta.

Eissa Jamil on Partner Engineer RL, Generatiivinen AI Metassa.

Tohtori Kyle Ulrich on soveltuva tutkija Amazon SageMaker JumpStart -tiimin kanssa. Hänen tutkimusalueitaan ovat skaalautuvat koneoppimisalgoritmit, tietokonenäkö, aikasarjat, Bayesin ei-parametrit ja Gaussin prosessit. Hänen tohtorinsa on Duken yliopistosta ja hän on julkaissut artikkeleita NeurIPS-, Cell- ja Neuron-julkaisuissa.

Tohtori Ashish Khetan on vanhempi soveltuva tutkija Amazon SageMaker JumpStartissa ja auttaa kehittämään koneoppimisalgoritmeja. Hän sai tohtorin tutkinnon Illinois Urbana-Champaignin yliopistosta. Hän on aktiivinen koneoppimisen ja tilastollisen päättelyn tutkija, ja hän on julkaissut monia artikkeleita NeurIPS-, ICML-, ICLR-, JMLR-, ACL- ja EMNLP-konferensseissa.

Vivek Singh on SageMaker JumpStartin tuotepäällikkö. Hän keskittyy siihen, että asiakkaat voivat liittyä SageMaker JumpStartiin yksinkertaistaakseen ja nopeuttaakseen ML-matkaansa generatiivisten tekoälysovellusten rakentamiseen.

spot_img

Uusin älykkyys

spot_img