Выполнение пакетного вывода LLM с помощью функций ИИ
Внимание
Эта функция предоставляется в режиме общедоступной предварительной версии.
В этой статье описывается, как выполнять пакетное вывод с помощью функций ИИ .
Вы можете выполнить пакетный вывод с помощью функций ИИ для конкретных задач или функции общего назначения ai_query
. Примеры, приведенные в этой статье, посвящены гибкости ai_query
и его использованию в пакетных конвейерах прогнозирования и рабочих процессах.
Существует два основных способа использования ai_query
для пакетного вывода:
- Пакетный вывод с использованием размещённых в Databricks базовых моделей
ai_query
и : При использовании данного метода Databricks настраивает служебную конечную точку модели, которая автоматически масштабируется в зависимости от рабочей нагрузки. Узнайте, какие предварительно подготовленные LLMs поддерживаются. - Пакетное предсказание с помощью
ai_query
и конечной точки развертывания модели, которую вы настраиваете самостоятельно. Этот метод необходим для рабочих процессов пакетного предсказания, использующих основные модели, размещенные за пределами Databricks, точно настроенные базовые модели или традиционные модели машинного обучения. После развертывания конечная точка может использоваться непосредственно сai_query
. См. пакетный вывод с помощью пользовательских моделей или точно настроенных основополагающих моделей.
Требования
- Рабочая область в регионе, где поддерживаются API-модели Foundation.
- Разрешение запроса на таблицу Delta в каталоге Unity, содержащую данные, которые вы хотите использовать.
- Задайте
pipelines.channel
в свойствах таблицы как «предпросмотр», чтобы использоватьai_query()
. См. пример запроса в требованиях .
Пакетное выведение LLM с использованием ai_query
и моделей на платформе Databricks
При использовании модели баз данных, размещенной и предварительно подготовленной для пакетного вывода, Databricks настраивает подготовленную конечную точку пропускной способности от вашего имени, которая автоматически масштабируется на основе рабочей нагрузки.
Чтобы использовать этот метод для пакетного вывода, укажите следующее в вашем запросе:
- Предварительно подготовленный LLM, который вы хотите использовать в
ai_query
. Выберите поддерживаемые предварительно подготовленные LLMs. - Входная таблица и выходная таблица каталога Unity.
- Запрос модели и все параметры модели.
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;
Развернуть конвейеры пакетного вывода
В этом разделе показано, как интегрировать функции ИИ в другие продукты Databricks, связанные с данными и ИИ, для создания полных конвейеров пакетного вывода. Эти конвейеры могут выполнять сквозные рабочие процессы, включающие подкачку данных, предварительную обработку, инференс и постобработку. Конвейеры можно создавать в SQL или Python и развертывать как:
- Запланированные рабочие процессы с помощью рабочих процессов Databricks
- Процессы потокового вывода с использованием структурированной потоковой обработки
Автоматизация заданий пакетного вывода с помощью рабочих процессов Databricks
Планирование заданий пакетного вывода и автоматизация конвейеров искусственного интеллекта.
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
Питон
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)
Функции ИИ с помощью структурированной потоковой передачи
Применяйте вывод искусственного интеллекта в режиме почти реального времени или микропакетных сценариев, используя ai_query
и структурированную потоковую передачу.
Шаг 1. Прочитайте вашу статическую таблицу Delta
Читайте вашу статическую таблицу Delta, как если бы это был поток
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: "
)
Шаг 2. Применить ai_query
Spark обрабатывает это только один раз для статических данных, если новые строки не приходят в таблицу.
df_transformed = df_stream.select(
"document_text",
F.expr(f"""
ai_query(
'llama_3_8b',
CONCAT('{prompt}', document_text)
)
""").alias("summary")
)
Шаг 3. Запись суммированных выходных данных
Запишите суммарный результат в другую таблицу 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()
пакетный инференс с помощью пользовательских моделей или долученных базовых моделей
Примеры ноутбуков в этом разделе демонстрируют пакетные рабочие нагрузки, использующие пользовательские или точно настроенные фундаментальные модели для обработки нескольких входов. Существует требование примеров к имеющейся конечной точке обслуживания модели, использующей API моделей Foundation с выделенной пропускной способностью.
Вывод пакетов с использованием пользовательской базовой модели LLM
В следующем примере блокнот создает выделенную конечную точку с пропускной способностью и выполняет пакетный LLM-инференс с помощью Python и модели Meta Llama 3.1 70B. Он также содержит рекомендации по тестированию рабочей нагрузки пакетного вывода и созданию подготовленной модели пропускной способности, обслуживающей конечную точку.
Пакетный вывод LLM с пользовательской фундаментальной моделью и ноутбуком с конечной точкой с зарезервированной пропускной способностью
Пакетная инференция LLM с использованием модели встраивания
В следующем примере блокнот создает выделенную конечную точку пропускной способности и выполняет пакетный инференс для LLM с использованием языка программирования Python, а также выбор модели встраивания GTE Large (английский) или BGE Large (английский).
Пакетное предсказание LLM с использованием ноутбука для эндпоинта с выделенной пропускной способностью
Пакетное инференс и извлечение структурированных данных
В следующем примере записной книжки показано, как выполнять базовое структурированное извлечение данных с помощью ai_query
для преобразования необработанных, неструктурированных данных в упорядоченные, используемые сведения с помощью методов автоматического извлечения. В этой записной книжке также показано, как использовать оценку агента Mosaic AI для оценки точности с использованием эталонных данных.
Ноутбук пакетного вывода и извлечения структурированных данных
Пакетная инференция на основе BERT для распознавания именованных сущностей (NER)
В следующей записной книжке показан традиционный пример вывода модели машинного обучения с помощью BERT.