Wykonywanie wsadowego wnioskowania LLM za pomocą funkcji sztucznej inteligencji
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej.
W tym artykule opisano sposób wnioskowania wsadowego przy użyciu AI Functions.
Możesz uruchamiać wnioskowanie wsadowe przy użyciu funkcji AI specyficznych dla zadań , lub funkcji ogólnego przeznaczenia ai_query
. Przykłady w tym artykule koncentrują się na elastyczności ai_query
i sposobie ich używania w potokach wnioskowania wsadowego i przepływach pracy.
Istnieją dwa główne sposoby używania ai_query
na potrzeby wnioskowania wsadowego:
- Wnioskowanie wsadowe przy użyciu modeli podstawowych
ai_query
i hostowanych w usłudze Databricks: kiedy korzystasz z tej metody, usługa Databricks konfiguruje punkt końcowy obsługi modelu, który jest automatycznie skalowany na podstawie obciążenia. Zobacz, które wstępnie przygotowane modele językowe są obsługiwane. - Wnioskowanie wsadowe przy użyciu
ai_query
i modelu służącego do obsługi punktu końcowego, które skonfigurujesz samodzielnie: ta metoda jest wymagana w przypadku przepływów pracy wnioskowania wsadowego, które korzystają z modeli podstawowych hostowanych poza usługą Databricks, dostrojonych modeli podstawowych lub tradycyjnych modeli uczenia maszynowego. Po wdrożeniu punkt końcowy może być używany bezpośrednio zai_query
. Zobacz batchowe wnioskowanie przy użyciu modeli niestandardowych lub dostrojonych modeli podstawowych.
Wymagania
- Obszar roboczy w regionie obsługującym interfejsy API modelu Foundation .
- Zapytaj o uprawnienia do tabeli Delta w katalogu Unity zawierającej dane, których chcesz użyć.
- Ustaw
pipelines.channel
we właściwościach tabeli jako "wersja zapoznawcza", aby użyćai_query()
. Zobacz Wymagania, aby zapoznać się z przykładowym zapytaniem.
wnioskowanie usługi Batch LLM przy użyciu modeli podstawowych hostowanych ai_query
i Databricks
Podczas korzystania z hostowanego na Databricks i wstępnie aprowizowanego modelu podstawowego do wnioskowania wsadowego, Databricks konfiguruje przepływowy punkt końcowy w Twoim imieniu, który automatycznie skaluje się w zależności od obciążenia roboczego.
Aby użyć tej metody do wnioskowania wsadowego, określ następujące elementy w żądaniu:
- Wstępnie aprowizowana usługa LLM, której chcesz użyć w
ai_query
. Wybierz spośród obsługiwanych wstępnie skonfigurowanych modeli LLM. - Tabela wejściowa i wyjściowa Unity Catalog.
- Wnioski modelu oraz wszystkie parametry modelu.
SELECT text, ai_query(
"databricks-meta-llama-3-1-8b-instruct",
"Summarize the given text comprehensively, covering key points and main ideas concisely while retaining relevant details and examples. Ensure clarity and accuracy without unnecessary repetition or omissions: " || text
) AS summary
FROM uc_catalog.schema.table;
Wdrażanie potoków wnioskowania wsadowego
W tej sekcji pokazano, jak zintegrować funkcje sztucznej inteligencji z innymi danymi usługi Databricks i produktami sztucznej inteligencji w celu utworzenia kompletnych potoków wnioskowania wsadowego. Te rurociągi mogą wykonywać przepływy pracy od początku do końca, które obejmują pozyskiwanie, przetwarzanie wstępne, wnioskowanie i przetwarzanie końcowe. Potoki danych można tworzyć w języku SQL lub Python oraz można wdrażać jako:
- Zaplanowane przepływy pracy przy użyciu przepływów pracy usługi Databricks
- Przepływy pracy związane z wnioskowaniem strumieniowym przy użyciu Structured Streaming
Automatyzowanie zadań wnioskowania wsadowego przy użyciu przepływów pracy usługi Databricks
Harmonogramowanie zadań wnioskowania wsadowego i automatyzowanie potoków sztucznej inteligencji.
SQL
SELECT
*,
ai_query('databricks-meta-llama-3-3-70b-instruct', request => concat("You are an opinion mining service. Given a piece of text, output an array of json results that extracts key user opinions, a classification, and a Positive, Negative, Neutral, or Mixed sentiment about that subject.
AVAILABLE CLASSIFICATIONS
Quality, Service, Design, Safety, Efficiency, Usability, Price
Examples below:
DOCUMENT
I got soup. It really did take only 20 minutes to make some pretty good soup. The noises it makes when it's blending are somewhat terrifying, but it gives a little beep to warn you before it does that. It made three or four large servings of soup. It's a single layer of steel, so the outside gets pretty hot. It can be hard to unplug the lid without knocking the blender against the side, which is not a nice sound. The soup was good and the recipes it comes with look delicious, but I'm not sure I'll use it often. 20 minutes of scary noises from the kitchen when I already need comfort food is not ideal for me. But if you aren't sensitive to loud sounds it does exactly what it says it does..
RESULT
[
{'Classification': 'Efficiency', 'Comment': 'only 20 minutes','Sentiment': 'Positive'},
{'Classification': 'Quality','Comment': 'pretty good soup','Sentiment': 'Positive'},
{'Classification': 'Usability', 'Comment': 'noises it makes when it's blending are somewhat terrifying', 'Sentiment': 'Negative'},
{'Classification': 'Safety','Comment': 'outside gets pretty hot','Sentiment': 'Negative'},
{'Classification': 'Design','Comment': 'Hard to unplug the lid without knocking the blender against the side, which is not a nice sound', 'Sentiment': 'Negative'}
]
DOCUMENT
", REVIEW_TEXT, '\n\nRESULT\n')) as result
FROM catalog.schema.product_reviews
LIMIT 10
Pyton
import json
from pyspark.sql.functions import expr
# Define the opinion mining prompt as a multi-line string.
opinion_prompt = """You are an opinion mining service. Given a piece of text, output an array of json results that extracts key user opinions, a classification, and a Positive, Negative, Neutral, or Mixed sentiment about that subject.
AVAILABLE CLASSIFICATIONS
Quality, Service, Design, Safety, Efficiency, Usability, Price
Examples below:
DOCUMENT
I got soup. It really did take only 20 minutes to make some pretty good soup.The noises it makes when it's blending are somewhat terrifying, but it gives a little beep to warn you before it does that.It made three or four large servings of soup.It's a single layer of steel, so the outside gets pretty hot. It can be hard to unplug the lid without knocking the blender against the side, which is not a nice sound.The soup was good and the recipes it comes with look delicious, but I'm not sure I'll use it often. 20 minutes of scary noises from the kitchen when I already need comfort food is not ideal for me. But if you aren't sensitive to loud sounds it does exactly what it says it does.
RESULT
[
{'Classification': 'Efficiency', 'Comment': 'only 20 minutes','Sentiment': 'Positive'},
{'Classification': 'Quality','Comment': 'pretty good soup','Sentiment': 'Positive'},
{'Classification': 'Usability', 'Comment': 'noises it makes when it's blending are somewhat terrifying', 'Sentiment': 'Negative'},
{'Classification': 'Safety','Comment': 'outside gets pretty hot','Sentiment': 'Negative'},
{'Classification': 'Design','Comment': 'Hard to unplug the lid without knocking the blender against the side, which is not a nice sound', 'Sentiment': 'Negative'}
]
DOCUMENT
"""
# Escape the prompt so it can be safely embedded in the SQL expression.
escaped_prompt = json.dumps(opinion_prompt)
# Read the source table and limit to 10 rows.
df = spark.table("catalog.schema.product_reviews").limit(10)
# Apply the LLM inference to each row, concatenating the prompt, the review text, and the tail string.
result_df = df.withColumn(
"result",
expr(f"ai_query('databricks-meta-llama-3-3-70b-instruct', request => concat({escaped_prompt}, REVIEW_TEXT, '\\n\\nRESULT\\n'))")
)
# Display the result DataFrame.
display(result_df)
Funkcje sztucznej inteligencji korzystające ze przesyłania strumieniowego ze strukturą
Zastosowanie wnioskowania przez sztuczną inteligencję w scenariuszach niemal w czasie rzeczywistym lub mikrosadowym przy użyciu ai_query
i strumieniowania o ustalonej strukturze.
Krok 1. Odczytaj statyczną tabelę Delta.
Odczytaj swoją statyczną tabelę delty tak, jakby była strumieniem
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
spark = SparkSession.builder.getOrCreate()
# Spark processes all existing rows exactly once in the first micro-batch.
df = spark.table("enterprise.docs") # Replace with your table name containing enterprise documents
df.repartition(50).write.format("delta").mode("overwrite").saveAsTable("enterprise.docs")
df_stream = spark.readStream.format("delta").option("maxBytesPerTrigger", "50K").table("enterprise.docs")
# Define the prompt outside the SQL expression.
prompt = (
"You are provided with an enterprise document. Summarize the key points in a concise paragraph. "
"Do not include extra commentary or suggestions. Document: "
)
Krok 2. Zastosuj ai_query
Platforma Spark przetwarza to tylko raz dla danych statycznych, chyba że nowe wiersze pojawią się w tabeli.
df_transformed = df_stream.select(
"document_text",
F.expr(f"""
ai_query(
'llama_3_8b',
CONCAT('{prompt}', document_text)
)
""").alias("summary")
)
Krok 3. Zapisywanie podsumowanych danych wyjściowych
Zapisz podsumowane dane wyjściowe do innej tabeli Delta
# Time-based triggers apply, but only the first trigger processes all existing static data.
query = df_transformed.writeStream \
.format("delta") \
.option("checkpointLocation", "/tmp/checkpoints/_docs_summary") \
.outputMode("append") \
.toTable("enterprise.docs_summary")
query.awaitTermination()
wnioskowanie wsadowe przy użyciu modeli niestandardowych lub modeli bazowych dostosowanych
Przykłady notesów w tej sekcji przedstawiają obciążenia wnioskowania wsadowego, które używają niestandardowych lub dostrojonych modeli podstawowych do przetwarzania wielu danych wejściowych. Przykłady wymagają istniejącego punktu końcowego obsługującego model, który korzysta z interfejsów API Modelu Podstawowego z przeznaczonym przepustowością.
Wnioskowanie wsadowe LLM przy użyciu niestandardowego modelu podstawowego
Poniższy przykładowy notatnik tworzy punkt końcowy z zarezerwowaną przepustowością i uruchamia wnioskowanie wsadowe przy użyciu LLM w Pythonie oraz modelu Meta Llama 3.1 70B. Zawiera również wskazówki dotyczące porównywania obciążenia wnioskowania wsadowego i tworzenia aprowizowanego modelu przepływności obsługującego punkt końcowy.
Wnioskowanie wsadowe LLM z niestandardowym modelem podstawowym i notatnikiem punktu końcowego z przydzieloną przepustowością
Wnioskowanie wsadowe LLM z użyciem modelu wektorów osadzających.
Poniższy przykładowy notes tworzy skonfigurowany punkt końcowy przepustowości i uruchamia wnioskowanie wsadowe modelu LLM przy użyciu Pythona oraz wybranego modelu osadzania: GTE Large (angielski) lub BGE Large (angielski).
Osadzanie wnioskowania wsadowego w usłudze LLM z aprowizowanym notesem punktu końcowego przepływności
Wnioskowanie wsadowe i wyodrębnianie danych strukturalnych
W poniższym przykładowym notesie pokazano, jak wykonać podstawowe wyodrębnianie danych ustrukturyzowanych przy użyciu ai_query
, aby przekształcić nieprzetworzone, nieustrukturyzowane dane w zorganizowane, używane informacje za pomocą technik automatycznego wyodrębniania. W tym notesie pokazano również, jak korzystać z Mosaic AI Agent Evaluation do oceny dokładności przy użyciu danych referencyjnych.
Wnioskowanie wsadowe i notatnik wyodrębniania danych ustrukturyzowanych
Wnioskowanie wsadowe przy użyciu BERT do rozpoznawania nazwanych jednostek
W poniższym notesie przedstawiono przykład tradycyjnego wnioskowania wsadowego modelu uczenia maszynowego przy użyciu BERT.