Büyük veri için Azure OpenAI

Azure OpenAI hizmetini kullanarak tamamlama API'sini sorarak birçok doğal dil görevini çözebilirsiniz. Azure OpenAI hizmeti, birkaç örnekten oluşan istemli iş akışlarınızı büyük örnek veri kümelerine ölçeklendirmeyi kolaylaştırmak için dağıtılmış makine öğrenmesi kitaplığı SynapseML ile tümleşir. Bu tümleştirmeyi kullanarak , OpenAI hizmetiyle milyonlarca istem işlemek için Apache Spark dağıtılmış bilgi işlem çerçevesini kullanabilirsiniz. Bu öğreticide, Azure OpenAI ve Microsoft Fabric kullanarak dağıtılmış ölçekte büyük dil modellerinin nasıl uygulanacağı gösterilmektedir.

Önkoşullar

Bu hızlı başlangıcın temel önkoşulları, çalışan bir OpenAI kaynağı Azure ve SynapseML yüklü bir Apache Spark kümesidir.

Bu kılavuzu not defteri olarak içeri aktar

Sonraki adım, bu kodu Spark kümenize eklemektir. Spark platformunuzda bir not defteri oluşturabilir ve tanıtımı çalıştırmak için kodu bu not defterine kopyalayabilirsiniz.

  1. Bu demoyu bir not defteri olarak indirin ( Raw'ı seçin, sonra dosyayı kaydedin).
  2. Fabric çalışma alanına aktarın.
  3. Kümenize SynapseML kurmak için kurulum kılavuzunu kullanın. Bu adım, içeri aktardığınız not defterinin en üstüne fazladan bir hücre yapıştırmayı gerektirir.
  4. Dizüstü bilgisayarınızı bir kümeye bağlayın ve hücreleri düzenleyip çalıştırarak sürece katılın.

Hizmet bilgilerini doldurma

Ardından, not defterindeki hücreyi hizmetinize işaret eden şekilde düzenleyin. service_name, deployment_name, locationve key değişkenlerini OpenAI hizmetinizle eşleşecek şekilde ayarlayın:

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-4.1-mini"
deployment_name_embeddings = "text-embedding-3-small"

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

İstemlerden oluşan bir veri kümesi oluşturun

Sonra, her satırda bir istem olacak şekilde bir dizi satırdan oluşan bir DataFrame oluşturun.

Verileri doğrudan ADLS'den veya diğer veritabanlarından da yükleyebilirsiniz. Spark DataFrame'lerin yüklenmesi ve hazırlanması hakkında daha fazla bilgi için Apache Spark veri yükleme rehberine bakınız.

df = spark.createDataFrame(
    [
        ("Hello my name is",),
        ("The best code is code that's",),
        ("SynapseML is ",),
    ]
).toDF("prompt")

OpenAIPrompt Apache Spark istemcisini oluşturma

Azure OpenAI hizmetini DataFrame'inize uygulamak için, dağıtık bir istemci olarak çalışan bir OpenAIPrompt nesne oluşturun. OpenAIPrompt nesnesi üzerindeki uygun ayarlayıcıları kullanarak hizmet parametrelerini tek bir değerle veya bir DataFrame sütunuyla ayarlayın. Bu örnekte 200 olarak ayarlayın maxTokens . Belirteç yaklaşık dört karakterdir ve bu sınır istem ve sonucun toplamı için geçerlidir. Parametreyi promptCol DataFrame'deki prompt sütununun adıyla ayarlayın.

from synapse.ml.services.openai import OpenAIPrompt

completion = (
    OpenAIPrompt()
    .setSubscriptionKey(key)
    .setDeploymentName(deployment_name)
    .setCustomServiceName(service_name)
    .setMaxTokens(200)
    .setPromptCol("prompt")
    .setErrorCol("error")
    .setOutputCol("completions")
)

OpenAIPrompt istemcisini kullanarak DataFrame'i dönüştürün

DataFrame ve prompt istemcisi oluşturulduktan sonra, giriş veri setinizi dönüştürün ve hizmetin eklediği tüm bilgilerle adlandırılmış completions bir sütun ekleyin. Basitlik için yalnızca metni seçin.

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

Çıkışınız şuna benzer olmalıdır. Tamamlanma metni örnekten farklıdır.

komut istemi hata text
Merhaba benim adım boş Makaveli, 18 yaşındayım ve büyüdüğümde rapçi olmak istiyorum. Müzik yazmayı ve yapmayı seviyorum. Los Angeles, CA'den geliyorum.
En iyi kod şu koddur: boş anlaşılabilir Bu öznel bir ifadedir ve kesin bir yanıt yoktur.
SynapseML şudur: boş Olayların gelecekteki sonuçlarını tahmin etmeyi öğrenebilen bir makine öğrenmesi algoritması.

Diğer Kullanım Örnekleri

Metin gömme oluşturma

Metni tamamlamanın yanı sıra, aşağı akış algoritmalarında veya vektör alma mimarilerinde kullanmak üzere metin de ekleyebilirsiniz. Eklemeler oluşturarak, büyük koleksiyonlardan belge arayabilir ve alabilirsiniz. komut istemi mühendisliği görev için yeterli olmadığında bu yaklaşımı kullanın. kullanma OpenAIEmbeddinghakkında daha fazla bilgi için ekleme kılavuzuna bakın.

from synapse.ml.services.openai import OpenAIEmbedding

embedding = (
    OpenAIEmbedding()
    .setSubscriptionKey(key)
    .setDeploymentName(deployment_name_embeddings)
    .setCustomServiceName(service_name)
    .setTextCol("prompt")
    .setErrorCol("error")
    .setOutputCol("embeddings")
)

display(embedding.transform(df))

Sohbet tamamlama

GPT-4o ve GPT-4.1 gibi modeller tek istemler yerine sohbetleri anlar. Transformatör OpenAIChatCompletion bu işlevi büyük ölçekte kullanıma sunar.

from synapse.ml.services.openai 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", "What's 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"
    )
)

İstek toplu işlemiyle aktarım hızını geliştirme

Örnek, hizmete her istem için bir tane olmak üzere birkaç istekte bulunur. Tek bir istekte birden çok istem tamamlamak için toplu iş modunu kullanın. Öncelikle, OpenAIPrompt nesnesinde "İstem" sütununu "İstem" olarak ayarlamak yerine, BatchPrompt sütununu "batchPrompt" olarak belirtin. Her satır için bir istem listesiyle bir DataFrame oluşturun.

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

Ardından nesnesini oluşturun OpenAIPrompt . tr-TR: İstem sütununu ayarlamak yerine, sütununuzun türü Array[String] ise batchPrompt sütununu ayarlayın.

batch_completion = (
    OpenAIPrompt()
    .setSubscriptionKey(key)
    .setDeploymentName(deployment_name)
    .setCustomServiceName(service_name)
    .setMaxTokens(200)
    .setBatchPromptCol("batchPrompt")
    .setErrorCol("error")
    .setOutputCol("completions")
)

Dönüştürme çağrısında her satır için bir istek yapılır. Her satır birden çok istem içerdiğinden, her istek bu satırdaki tüm istemleri gönderir. Sonuçlar, istekteki her satır için bir satır içerir.

completed_batch_df = batch_completion.transform(batch_df).cache()
display(completed_batch_df)

Otomatik bir minibatcher kullanımı

Verileriniz sütun biçimindeyse SynapseML'nin FixedMiniBatcherTransformerkullanarak satır biçimine çevirebilirsiniz.

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)

Çeviri için yapay zeka istem mühendisliği

Azure OpenAI hizmeti, prompt engineering aracılığıyla birçok farklı doğal dil görevini çözebilir. Bu örnekte dil çevirisi istemi gösterilmektedir:

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

Soru yanıtlama istemi

Bu örnek modelden genel bilgi sorusu yanıtlamasını ister:

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