Azure OpenAI massadataa varten
Azure OpenAI -palvelun avulla voidaan ratkaista monia luonnollisen kielen tehtäviä, koska se pyytää suoritusten ohjelmointirajapintaa. Jotta kehotustyönkulkujen skaalaaminen muutamasta esimerkistä suuriin esimerkkitietojoukkoihin olisi helpompaa, integroimme Azure OpenAI -palvelun hajautetun koneoppimiskirjaston SynapseML:n kanssa. Tämän integraation avulla on helppo käyttää hajautettua Apache Spark -käsittelykehystä miljoonien kehotteiden käsittelemiseen OpenAI-palvelun avulla. Tässä opetusohjelmassa kerrotaan, miten voit käyttää suuria kielimalleja hajautetun asteikon kautta Azure OpenAI:n ja Azure Synapse Analyticsin avulla.
Tämän pikaoppaan keskeisiin edellytyksiin kuuluvat toimiva Azure OpenAI -resurssi ja Apache Spark -klusteri, johon on asennettu SynapseML.
Hanki Microsoft Fabric -tilaus. Voit myös rekisteröityä ilmaiseen Microsoft Fabric -kokeiluversioon.
Siirry Synapse Data Science -käyttökokemukseen aloitussivun vasemmassa reunassa olevan käyttökokemuksen vaihtajan avulla.
- Siirry Microsoft Fabricin datatieteen kokemukseen.
- Luo uusi muistikirja.
- Azure OpenAI -resurssi: pyydä käyttöoikeutta Azure OpenAI -palveluun ennen resurssin luomista
Seuraava vaihe on lisätä tämä koodi Spark-klusteriin. Voit joko luoda muistikirjan Spark-ympäristöön ja kopioida koodin tähän muistikirjaan esittelyn suorittamista varten. Tai lataa muistikirja ja tuo se Synapse Analyticsiin
- Lataa tämä esittely muistikirjana (valitse Raaka ja tallenna sitten tiedosto)
- Tuo muistikirja Synapse-työtilaan tai jos käytät Fabric-tuontia Fabric-työtilaan
- Asenna SynapseML klusteriin. Katso Synapse-asennusohjeet SynapseML-sivuston alareunasta. Jos käytät Fabricia, tutustu asennusoppaaseen. Tämä edellyttää ylimääräisen solun liittämistä tuomiesi muistikirjojen yläreunaan.
- Yhdistä muistikirja klusteriin ja seuraa, muokkaa ja suorita soluja.
Muokkaa sitten muistikirjassa olevaa solua niin, että se osoittaa palveluseesi. Määritä erityisesti -service_name
, -, location
- ja key
-muuttujat vastaamaan Niitä OpenAI-palvelussadeployment_name
:
import os
from pyspark.sql import SparkSession
from synapse.ml.core.platform import running_on_synapse, find_secret
# Bootstrap Spark Session
spark = SparkSession.builder.getOrCreate()
if running_on_synapse():
from notebookutils.visualization import display
# Fill in the following lines with your service information
# Learn more about selecting which embedding model to choose: https://openai.com/blog/new-and-improved-embedding-model
service_name = "synapseml-openai"
deployment_name = "gpt-35-turbo"
deployment_name_embeddings = "text-embedding-ada-002"
key = find_secret(
"openai-api-key"
) # please replace this line with your key as a string
assert key is not None and service_name is not None
Luo seuraavaksi tietokehys, joka koostuu rivisarjasta, jossa on yksi kehote riviä kohti.
Voit myös ladata tietoja suoraan ADLS:stä tai muista tietokannoista. Lisätietoja Spark-tietokehyksen lataamisesta ja valmistelusta on Apache Spark -tietojen latausoppaassa.
df = spark.createDataFrame(
[
("Hello my name is",),
("The best code is code thats",),
("SynapseML is ",),
]
).toDF("prompt")
Jotta voit käyttää OpenAI-viimeistelypalvelua luomaasi tietokehykseen, luo OpenAICompletion-objekti, joka toimii hajautettuna asiakkaana. Palvelun parametrit voidaan määrittää joko yhdellä arvolla tai tietokehyksen sarakkeella, jossa on tarvittavat arvot objektissa OpenAICompletion
. Asetuksena on maxTokens
200. Tunnus on noin neljä merkkiä, ja tämä rajoitus koskee kehotteen ja tuloksen summaa. Määritämme parametrille promptCol
myös kehotesarakkeen nimen tietokehyksessä.
from synapse.ml.cognitive import OpenAICompletion
completion = (
OpenAICompletion()
.setSubscriptionKey(key)
.setDeploymentName(deployment_name)
.setCustomServiceName(service_name)
.setMaxTokens(200)
.setPromptCol("prompt")
.setErrorCol("error")
.setOutputCol("completions")
)
Kun tietokehys ja täydennysasiakas on valmis, voit muuntaa syötteen tietojoukon ja lisätä sarakkeen nimeltä completions
kaikki palvelun lisäämiä tietoja. Yksinkertaisuuden vuoksi valitse vain teksti.
from pyspark.sql.functions import col
completed_df = completion.transform(df).cache()
display(
completed_df.select(
col("prompt"),
col("error"),
col("completions.choices.text").getItem(0).alias("text"),
)
)
Tulostesi pitäisi näyttää suunnilleen tämänkaltaisilta. Valmistumisteksti eroaa mallista.
ripeä | virhe | Tekstiviesti |
---|---|---|
Hei, nimeni on | tyhjä | Makaveli Olen 18-vuotias ja haluan olla räppäri, kun kasvan, rakastan kirjoittamista ja musiikin tekemistä, olen Los Angelesista, CA: sta |
Paras koodi on koodi, joka on | tyhjä | ymmärrettävää Tämä on subjektiivinen lausunto, eikä lopullista vastausta ole. |
SynapseML on | tyhjä | Koneoppimisen algoritmi, joka oppii ennakoimaan tapahtumien tulevaa tulosta. |
Tekstin suorittamisen lisäksi voimme myös upottaa tekstiä käytettäväksi jatkoalgoritmien tai vektorin noutoarkkitehtuurien kanssa. Upotusten luomisen avulla voit hakea ja noutaa asiakirjoja suurista kokoelmista. Niitä voidaan käyttää, kun kehotteiden suunnittelu ei riitä tehtävään. Jos haluat lisätietoja -toiminnon käytöstä OpenAIEmbedding
, tutustu upotusoppaaseen.
from synapse.ml.cognitive import OpenAIEmbedding
embedding = (
OpenAIEmbedding()
.setSubscriptionKey(key)
.setDeploymentName(deployment_name_embeddings)
.setCustomServiceName(service_name)
.setTextCol("prompt")
.setErrorCol("error")
.setOutputCol("embeddings")
)
display(embedding.transform(df))
Mallit, kuten ChatGPT ja GPT-4, pystyvät ymmärtämään keskusteluja yksittäisten kehotteiden sijaan. Muuntaja OpenAIChatCompletion
näyttää tämän toiminnon mittakaavassa.
from synapse.ml.cognitive import OpenAIChatCompletion
from pyspark.sql import Row
from pyspark.sql.types import *
def make_message(role, content):
return Row(role=role, content=content, name=role)
chat_df = spark.createDataFrame(
[
(
[
make_message(
"system", "You are an AI chatbot with red as your favorite color"
),
make_message("user", "Whats your favorite color"),
],
),
(
[
make_message("system", "You are very excited"),
make_message("user", "How are you today"),
],
),
]
).toDF("messages")
chat_completion = (
OpenAIChatCompletion()
.setSubscriptionKey(key)
.setDeploymentName(deployment_name)
.setCustomServiceName(service_name)
.setMessagesCol("messages")
.setErrorCol("error")
.setOutputCol("chat_completions")
)
display(
chat_completion.transform(chat_df).select(
"messages", "chat_completions.choices.message.content"
)
)
Esimerkissä palveluun tehdään useita pyyntöjä, yksi kutakin kehotetta kohden. Jos haluat suorittaa useita kehotteita yhdessä pyynnössä, käytä erätilaa. Määritä ensin OpenAICompletion-objektissa Kehote-sarakkeen kehotteen kehotteen sijaan batchprompt-sarake. Voit tehdä tämän luomalla tietokehyksen, jossa on kehotteiden luettelo riviä kohden.
Kirjoittamisten jälkeen yksittäisessä pyynnössä on tällä hetkellä enintään 20 kehotetta ja kiinteä raja 2048 "tunnuksia" tai noin 1500 sanaa.
batch_df = spark.createDataFrame(
[
(["The time has come", "Pleased to", "Today stocks", "Here's to"],),
(["The only thing", "Ask not what", "Every litter", "I am"],),
]
).toDF("batchPrompt")
Seuraavaksi luomme OpenAICompletion-objektin. Sen sijaan, että määrittäsit kehotesarakkeen, määritä batchPrompt-sarake, jos sarakkeen tyyppi Array[String]
on .
batch_completion = (
OpenAICompletion()
.setSubscriptionKey(key)
.setDeploymentName(deployment_name)
.setCustomServiceName(service_name)
.setMaxTokens(200)
.setBatchPromptCol("batchPrompt")
.setErrorCol("error")
.setOutputCol("completions")
)
Muunnoskutsussa tehdään pyyntö riviä kohden. Koska yhdellä rivillä on useita kehotteita, kukin pyyntö lähetetään kaikki tämän rivin kehotteet mukanaan. Tulokset sisältävät rivin kullekin pyynnön riville.
completed_batch_df = batch_completion.transform(batch_df).cache()
display(completed_batch_df)
Jos tiedot ovat sarakemuodossa, voit transponoida ne rivimuotoon SynapseML:n -parametrilla FixedMiniBatcherTransformer
.
from pyspark.sql.types import StringType
from synapse.ml.stages import FixedMiniBatchTransformer
from synapse.ml.core.spark import FluentAPI
completed_autobatch_df = (
df.coalesce(
1
) # Force a single partition so that our little 4-row dataframe makes a batch of size 4, you can remove this step for large datasets
.mlTransform(FixedMiniBatchTransformer(batchSize=4))
.withColumnRenamed("prompt", "batchPrompt")
.mlTransform(batch_completion)
)
display(completed_autobatch_df)
Azure OpenAI -palvelu voi ratkaista monia luonnollisen kielen tehtäviä kehotteesta riippuen. Tässä on esimerkki kielen käännösten kehotuksesta:
translate_df = spark.createDataFrame(
[
("Japanese: Ookina hako \nEnglish: Big box \nJapanese: Midori tako\nEnglish:",),
(
"French: Quel heure et il au Montreal? \nEnglish: What time is it in Montreal? \nFrench: Ou est le poulet? \nEnglish:",
),
]
).toDF("prompt")
display(completion.transform(translate_df))
Tässä kysymme GPT-3:lta yleisen tietämyksen kysymyksen vastauksen:
qa_df = spark.createDataFrame(
[
(
"Q: Where is the Grand Canyon?\nA: The Grand Canyon is in Arizona.\n\nQ: What is the weight of the Burj Khalifa in kilograms?\nA:",
)
]
).toDF("prompt")
display(completion.transform(qa_df))