Tune a model using your data
This document shows you how to create a BigQuery ML
remote model
that references either the Vertex AI gemini-1.0-pro-002
model or version of the
Vertex AI text-bison
model,
and then configure the model to perform supervised tuning.
After you create the remote model, you use the
ML.EVALUATE
function
to evaluate the model and confirm that the model's performance suits your use
case. You can then use the model in conjunction with the
ML.GENERATE_TEXT
function
to analyze text in a BigQuery table.
For more information, see Vertex AI Gemini API model supervised tuning or Vertex AI PaLM API text model supervised tuning.
Required permissions
To create a connection, you need membership in the following Identity and Access Management (IAM) role:
roles/bigquery.connectionAdmin
To grant permissions to the connection's service account, you need the following permission:
resourcemanager.projects.setIamPolicy
To create the model using BigQuery ML, you need the following IAM permissions:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
To run inference, you need the following permissions:
bigquery.tables.getData
on the tablebigquery.models.getData
on the modelbigquery.jobs.create
Before you begin
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection,Vertex AI, and Compute Engine APIs.
Create a connection
Create a Cloud resource connection and get the connection's service account.
Select one of the following options:
Console
Go to the BigQuery page.
To create a connection, click
Add, and then click Connections to external data sources.In the Connection type list, select Vertex AI remote models, remote functions and BigLake (Cloud Resource).
In the Connection ID field, enter a name for your connection.
Click Create connection.
Click Go to connection.
In the Connection info pane, copy the service account ID for use in a later step.
bq
In a command-line environment, create a connection:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
The
--project_id
parameter overrides the default project.Replace the following:
REGION
: your connection regionPROJECT_ID
: your Google Cloud project IDCONNECTION_ID
: an ID for your connection
When you create a connection resource, BigQuery creates a unique system service account and associates it with the connection.
Troubleshooting: If you get the following connection error, update the Google Cloud SDK:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Retrieve and copy the service account ID for use in a later step:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
The output is similar to the following:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
Append the following section into your main.tf
file.
## This creates a cloud resource connection. ## Note: The cloud resource nested object has only one output only field - serviceAccountId. resource "google_bigquery_connection" "connection" { connection_id = "CONNECTION_ID" project = "PROJECT_ID" location = "REGION" cloud_resource {} }
CONNECTION_ID
: an ID for your connectionPROJECT_ID
: your Google Cloud project IDREGION
: your connection region
Give the connection's service account access
Give your service account permission to access Vertex AI. Failure to give permission results in an error. Select one of the following options:
Console
Go to the IAM & Admin page.
Click
Grant Access.For New principals, enter the service account ID that you copied earlier.
Click Select a role.
In Filter, type
Vertex AI Service Agent
and then select that role.Click Save.
gcloud
Use the
gcloud projects add-iam-policy-binding
command:
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.serviceAgent' --condition=None
Replace the following:
PROJECT_NUMBER
: your project number.MEMBER
: the service account ID that you copied earlier.
The service account associated with your connection is an instance of the BigQuery Connection Delegation Service Agent, so it is OK to assign a service agent role to it.
Give the Compute Engine default service account access
When you enable the Compute Engine API, the Compute Engine default service account is automatically granted the Editor role on the project, unless you have disabled this behavior for your project. If that's the case, then you must re-grant the Editor role to the Compute Engine default service account access so that it has sufficient permissions to create and tune a remote model.
Console
Go to the IAM & Admin page.
Click
Grant Access.For New principals, enter the service account ID, which is
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.Click Select a role.
In Select a role, choose Basic and then select Editor.
Click Save.
gcloud
Use the
gcloud projects add-iam-policy-binding
command:
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/editor' --condition=None
Replace the following:
PROJECT_NUMBER
: your project number.MEMBER
: the service account ID, which isPROJECT_NUMBER-compute@developer.gserviceaccount.com
.
Create the tuning service agent
Create a service agent to run the tuning job.
Create a service agent for a gemini-1.0-pro-002
model
Create an instance of the Vertex AI Secure Fine Tuning Service Agent:
Use the
gcloud beta services identity create
command to create the tuning service agent:gcloud beta services identity create --service=aiplatform.googleapis.com --project=PROJECT_NUMBER
Replace
PROJECT_NUMBER
with your project number.Use the
gcloud projects add-iam-policy-binding
command to grant the tuning service agent the Vertex AI Tuning Service Agent (roles/aiplatform.tuningServiceAgent
) role:gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-vertex-tune.iam.gserviceaccount.com' --role='roles/aiplatform.tuningServiceAgent'
Replace
PROJECT_NUMBER
with your project number.
Create a service agent for a text-bison
model
Create an instance of the AI Platform Fine Tuning Service Agent:
Use the
gcloud beta services identity create
command to create the tuning service agent:gcloud beta services identity create --service=aiplatform.googleapis.com --project=PROJECT_NUMBER
Replace
PROJECT_NUMBER
with your project number.Use the
gcloud projects add-iam-policy-binding
command to grant the tuning service agent the Vertex AI Service agent (roles/aiplatform.serviceAgent
) role:gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-aiplatform-ft.iam.gserviceaccount.com' --role='roles/aiplatform.serviceAgent'
Replace
PROJECT_NUMBER
with your project number.
Create a model with supervised tuning
In the Google Cloud console, go to the BigQuery page.
In the query editor, run the following query to create a remote model:
gemini-1.0-pro-002
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS ( ENDPOINT = 'ENDPOINT', MAX_ITERATIONS = MAX_ITERATIONS, LEARNING_RATE_MULTIPLIER = LEARNING_RATE_MULTIPLIER, DATA_SPLIT_METHOD = 'DATA_SPLIT_METHOD', DATA_SPLIT_EVAL_FRACTION = DATA_SPLIT_EVAL_FRACTION, DATA_SPLIT_COL = 'DATA_SPLIT_COL', EVALUATION_TASK = 'EVALUATION_TASK', PROMPT_COL = 'INPUT_PROMPT_COL', INPUT_LABEL_COLS = INPUT_LABEL_COLS) AS SELECT PROMPT_COLUMN, LABEL_COLUMN FROM `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`;
Replace the following:
PROJECT_ID
: the project ID of the project in which to create the model.DATASET_ID
: the ID of the dataset to contain the model. This dataset must be in a supported pipeline job and model upload region.MODEL_NAME
: the name of the model.REGION
: the region used by the connection.CONNECTION_ID
: the ID of your BigQuery connection. This connection must be in the same location as the dataset that you are using.When you view the connection details in the Google Cloud console, this is the value in the last section of the fully qualified connection ID that is shown in Connection ID—for example,
projects/myproject/locations/connection_location/connections/myconnection
.ENDPOINT
: aSTRING
value that specifies the name of the model to use, which in this case must begemini-1.0-pro-002
.MAX_ITERATIONS
: anINT64
value that specifies the number of steps to run for supervised tuning. TheMAX_ITERATIONS
value must be between1
and∞
.The
gemini-1.0-pro-002
model trains using epochs rather than steps, so BigQuery ML converts theMAX_ITERATIONS
value to epochs. The default value forMAX_ITERATIONS
is the number of rows in the input data, which is equivalent to one epoch. To use multiple epochs, specify a multiple of the number of rows in your training data. For example, if you have 100 rows of input data and you want to use two epochs, specify200
for the argument value. If you provide a value that isn't a multiple of the number of rows in the input data, BigQuery ML rounds up to the nearest epoch. For example, if you have 100 rows of input data and you specify101
for theMAX_ITERATIONS
value, training is performed with two epochs.For more information about the parameters used to tune
gemini-1.0-pro-002
models, see Create a tuning job.LEARNING_RATE_MULTIPLIER
: aFLOAT64
A multiplier to apply to the recommended learning rate. The default value is1.0
.DATA_SPLIT_METHOD
: aSTRING
value that specifies the method used to split input data into training and evaluation sets. The valid options are the following:AUTO_SPLIT
: BigQuery ML automatically splits the data. The way in which the data is split varies depending on the number of rows in the input table. This is the default value.RANDOM
: data is randomized before being split into sets. To customize the data split, you can use this option with theDATA_SPLIT_EVAL_FRACTION
option.CUSTOM
: data is split using the column provided in theDATA_SPLIT_COL
option. TheDATA_SPLIT_COL
value must be the name of a column of typeBOOL
. Rows with a value ofTRUE
orNULL
are used as evaluation data, and rows with a value ofFALSE
are used as training data.SEQ
: split data using the column provided in theDATA_SPLIT_COL
option. TheDATA_SPLIT_COL
value must be the name of a column of one of the following types:NUMERIC
BIGNUMERIC
STRING
TIMESTAMP
The data is sorted smallest to largest based on the specified column.
The first n rows are used as evaluation data, where n is the value specified for
DATA_SPLIT_EVAL_FRACTION
. The remaining rows are used as training data.NO_SPLIT
: no data split; all input data is used as training data.
For more information about these data split options, see
DATA_SPLIT_METHOD
.DATA_SPLIT_EVAL_FRACTION
: aFLOAT64
value that specifies the fraction of the data to use as evaluation data when performing supervised tuning. Must be a value in the range[0, 1.0]
. The default value is0.2
.Use this option when you specify
RANDOM
orSEQ
as the value for theDATA_SPLIT_METHOD
option. To customize the data split, you can use theDATA_SPLIT_METHOD
option with theDATA_SPLIT_EVAL_FRACTION
option.DATA_SPLIT_COL
: aSTRING
value that specifies the name of the column to use to sort input data into the training or evaluation set. Use when you are specifyingCUSTOM
orSEQ
as the value for theDATA_SPLIT_METHOD
option.EVALUATION_TASK
: aSTRING
value that specifies the type of task that you want to tune the model to perform. The valid options are:TEXT_GENERATION
CLASSIFICATION
SUMMARIZATION
QUESTION_ANSWERING
UNSPECIFIED
The default value is
UNSPECIFIED
.INPUT_PROMPT_COL
: aSTRING
value that contains the name of the prompt column in the training data table to use when performing supervised tuning. The default value isprompt
.INPUT_LABEL_COLS
: anARRAY<<STRING>
value that contains the name of the label column in the training data table to use in supervised tuning. You can only specify one element in the array. The default value is an empty array. This causeslabel
to be the default value of theLABEL_COLUMN
argument.PROMPT_COLUMN
: the column in the training data table that contains the prompt for evaluating the content in theLABEL_COLUMN
column. This column must be ofSTRING
type or be cast toSTRING
. If you specify a value for theINPUT_PROMPT_COL
option, you must specify the same value forPROMPT_COLUMN
. Otherwise this value must beprompt
. If your table does not have aprompt
column, use an alias to specify an existing table column. For example,AS SELECT hint AS prompt, label FROM mydataset.mytable
.LABEL_COLUMN
: the column in the training data table that contains the examples to train the model with. This column must be ofSTRING
type or be cast toSTRING
. If you specify a value for theINPUT_LABEL_COLS
option, you must specify the same value forLABEL_COLUMN
. Otherwise this value must belabel
. If your table does not have alabel
column, use an alias to specify an existing table column. For example,AS SELECT prompt, feature AS label FROM mydataset.mytable
.TABLE_PROJECT_ID
: the project ID of the project that contains the training data table.TABLE_DATASET
: the name of the dataset that contains the training data table.TABLE_NAME
: the name of the table that contains the data to use to train the model.
text-bison
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS ( ENDPOINT = 'ENDPOINT', MAX_ITERATIONS = MAX_ITERATIONS, LEARNING_RATE_MULTIPLIER = LEARNING_RATE_MULTIPLIER, EARLY_STOP = EARLY_STOP, ACCELERATOR_TYPE = 'ACCELERATOR_TYPE', DATA_SPLIT_METHOD = 'DATA_SPLIT_METHOD', DATA_SPLIT_EVAL_FRACTION = DATA_SPLIT_EVAL_FRACTION, DATA_SPLIT_COL = 'DATA_SPLIT_COL', EVALUATION_TASK = 'EVALUATION_TASK', PROMPT_COL = 'INPUT_PROMPT_COL', INPUT_LABEL_COLS = INPUT_LABEL_COLS) AS SELECT PROMPT_COLUMN, LABEL_COLUMN FROM `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`;
Replace the following:
PROJECT_ID
: the project ID of the project in which to create the model.DATASET_ID
: the ID of the dataset to contain the model. This dataset must be in a supported pipeline job and model upload region.MODEL_NAME
: the name of the model.REGION
: the region used by the connection.CONNECTION_ID
: the ID of your BigQuery connection. This connection must be in the same location as the dataset that you are using.When you view the connection details in the Google Cloud console, this is the value in the last section of the fully qualified connection ID that is shown in Connection ID—for example,
projects/myproject/locations/connection_location/connections/myconnection
.ENDPOINT
: aSTRING
value that specifies the name of the model to use, which in this case must be any version of thetext-bison
model.MAX_ITERATIONS
: anINT64
value that specifies the number of steps to run for supervised tuning. TheMAX_ITERATIONS
value must be between1
and∞
. Typically, 100 steps takes about an hour to complete. The default value is300
.The
MAX_ITERATIONS
value in combination with theACCELERATOR_TYPE
value affects the batch size used in model training. For more information about how batch size is determined, seeMAX_ITERATIONS
. For more guidance on choosing the number of training steps, see Recommended configurations.LEARNING_RATE_MULTIPLIER
: aFLOAT64
A multiplier to apply to the recommended learning rate. The default value is1.0
.EARLY_STOP
: aBOOL
value that determines whether to stop supervised tuning before completing all of the tuning steps. When set toTRUE
, it stops supervised tuning if model performance, as measured by the accuracy of predicted tokens, doesn't improve enough between evaluation runs. When set toFALSE
, supervised tuning continues until all the tuning steps are complete. The default value isFALSE
.ACCELERATOR_TYPE
: aSTRING
value that specifies the type of accelerator to use for supervised tuning. The valid options are the following:GPU
: uses A100 80 GB GPUs for supervised tuning.TPU
: uses 64 cores of the TPU v3 pod for supervised tuning. If you choose this option, the following is true:- You must run your query in the
europe-west4
region. For information about changing query options such as the location, see Run an interactive query. - Your supervised tuning computations occur in the
europe-west4
region, because that's where TPU resources are located.
- You must run your query in the
The default value is
GPU
. Whichever option you use, make sure you have enough quota.DATA_SPLIT_METHOD
: aSTRING
value that specifies the method used to split input data into training and evaluation sets. The valid options are the following:AUTO_SPLIT
: BigQuery ML automatically splits the data. The way in which the data is split varies depending on the number of rows in the input table. This is the default value.RANDOM
: data is randomized before being split into sets. To customize the data split, you can use this option with theDATA_SPLIT_EVAL_FRACTION
option.CUSTOM
: data is split using the column provided in theDATA_SPLIT_COL
option. TheDATA_SPLIT_COL
value must be the name of a column of typeBOOL
. Rows with a value ofTRUE
orNULL
are used as evaluation data, and rows with a value ofFALSE
are used as training data.SEQ
: split data using the column provided in theDATA_SPLIT_COL
option. TheDATA_SPLIT_COL
value must be the name of a column of one of the following types:NUMERIC
BIGNUMERIC
STRING
TIMESTAMP
The data is sorted smallest to largest based on the specified column.
The first n rows are used as evaluation data, where n is the value specified for
DATA_SPLIT_EVAL_FRACTION
. The remaining rows are used as training data.NO_SPLIT
: no data split; all input data is used as training data.
For more information about these data split options, see
DATA_SPLIT_METHOD
.DATA_SPLIT_EVAL_FRACTION
: aFLOAT64
value that specifies the fraction of the data to use as evaluation data when performing supervised tuning. Must be a value in the range[0, 1.0]
. The default value is0.2
.Use this option when you specify
RANDOM
orSEQ
as the value for theDATA_SPLIT_METHOD
option. To customize the data split, you can use theDATA_SPLIT_METHOD
option with theDATA_SPLIT_EVAL_FRACTION
option.DATA_SPLIT_COL
: aSTRING
value that specifies the name of the column to use to sort input data into the training or evaluation set. Use when you are specifyingCUSTOM
orSEQ
as the value for theDATA_SPLIT_METHOD
option.EVALUATION_TASK
: aSTRING
value that specifies the type of task that you want to tune the model to perform. The valid options are:TEXT_GENERATION
CLASSIFICATION
SUMMARIZATION
QUESTION_ANSWERING
UNSPECIFIED
The default value is
UNSPECIFIED
.INPUT_PROMPT_COL
: aSTRING
value that contains the name of the prompt column in the training data table to use when performing supervised tuning. The default value isprompt
.INPUT_LABEL_COLS
: anARRAY<<STRING>
value that contains the name of the label column in the training data table to use in supervised tuning. You can only specify one element in the array. The default value is an empty array. This causeslabel
to be the default value of theLABEL_COLUMN
argument.PROMPT_COLUMN
: the column in the training data table that contains the prompt for evaluating the content in theLABEL_COLUMN
column. This column must be ofSTRING
type or be cast toSTRING
. If you specify a value for theINPUT_PROMPT_COL
option, you must specify the same value forPROMPT_COLUMN
. Otherwise this value must beprompt
. If your table does not have aprompt
column, use an alias to specify an existing table column. For example,AS SELECT hint AS prompt, label FROM mydataset.mytable
.LABEL_COLUMN
: the column in the training data table that contains the examples to train the model with. This column must be ofSTRING
type or be cast toSTRING
. If you specify a value for theINPUT_LABEL_COLS
option, you must specify the same value forLABEL_COLUMN
. Otherwise this value must belabel
. If your table does not have alabel
column, use an alias to specify an existing table column. For example,AS SELECT prompt, feature AS label FROM mydataset.mytable
.TABLE_PROJECT_ID
: the project ID of the project that contains the training data table.TABLE_DATASET
: the name of the dataset that contains the training data table.TABLE_NAME
: the name of the table that contains the data to use to train the model.
Evaluate the tuned model
In the Google Cloud console, go to the BigQuery page.
In the query editor, run the following query to evaluate the tuned model:
SELECT * FROM ML.EVALUATE( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, TABLE `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`, STRUCT('TASK_TYPE' AS task_type, TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_K AS top_k, TOP_P AS top_p));
Replace the following:
PROJECT_ID
: the project ID of the project that contains the model.DATASET_ID
: the ID of the dataset that contains the model.MODEL_NAME
: the name of the model.TABLE_PROJECT_ID
: the project ID of the project that contains the evaluation data table.TABLE_DATASET
: the name of the dataset that contains the evaluation data table.TABLE_NAME
: the name of the table that contains the evaluation data.The table must have a column whose name matches the prompt column name that is provided during model training. You can provide this value by using the
prompt_col
option during model training. Ifprompt_col
is unspecified, the column namedprompt
in the training data is used. An error is returned if there is no column namedprompt
.The table must have a column whose name matches the label column name that is provided during model training. You can provide this value by using the
input_label_cols
option during model training. Ifinput_label_cols
is unspecified, the column namedlabel
in the training data is used. An error is returned if there is no column namedlabel
.TASK_TYPE
: aSTRING
value that specifies the type of task that you want to evaluate the model for. The valid options are:TEXT_GENERATION
CLASSIFICATION
SUMMARIZATION
QUESTION_ANSWERING
UNSPECIFIED
TOKENS
: anINT64
value that sets the maximum number of tokens that can be generated in the response. This value must be in the range[1,1024]
. Specify a lower value for shorter responses and a higher value for longer responses. The default is128
.TEMPERATURE
: aFLOAT64
value in the range[0.0,1.0]
that controls the degree of randomness in token selection. The default is0
.Lower values for
temperature
are good for prompts that require a more deterministic and less open-ended or creative response, while higher values fortemperature
can lead to more diverse or creative results. A value of0
fortemperature
is deterministic, meaning that the highest probability response is always selected.TOP_K
: anINT64
value in the range[1,40]
that determines the initial pool of tokens the model considers for selection. Specify a lower value for less random responses and a higher value for more random responses. The default is40
.TOP_P
: aFLOAT64
value in the range[0.0,1.0]
helps determine which tokens from the pool determined byTOP_K
are selected. Specify a lower value for less random responses and a higher value for more random responses. The default is0.95
.
Generate text
Generate text with the
ML.GENERATE_TEXT
function:
Prompt column
Generate text by using a table column to provide the prompt.
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, TABLE PROJECT_ID.DATASET_ID.TABLE_NAME, STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output, STOP_SEQUENCES AS stop_sequences) );
Replace the following:
PROJECT_ID
: your project ID.DATASET_ID
: the ID of the dataset that contains the model.MODEL_NAME
: the name of the model.TABLE_NAME
: the name of the table that contains the prompt. This table must have a column whose name matches the name of the feature column in the tuned LLM. The feature column name in the LLM can be set by using thePROMPT_COL
option when creating the model. Otherwise, the feature column name in the LLM isprompt
by default, or you can use an alias to use a differently named column.TOKENS
: anINT64
value that sets the maximum number of tokens that can be generated in the response. This value must be in the range[1,1024]
. Specify a lower value for shorter responses and a higher value for longer responses. The default is128
.TEMPERATURE
: aFLOAT64
value in the range[0.0,1.0]
that controls the degree of randomness in token selection. The default is0
.Lower values for
temperature
are good for prompts that require a more deterministic and less open-ended or creative response, while higher values fortemperature
can lead to more diverse or creative results. A value of0
fortemperature
is deterministic, meaning that the highest probability response is always selected.TOP_K
: anINT64
value in the range[1,40]
that determines the initial pool of tokens the model considers for selection. Specify a lower value for less random responses and a higher value for more random responses. The default is40
.TOP_P
: aFLOAT64
value in the range[0.0,1.0]
helps determine the probability of the tokens selected. Specify a lower value for less random responses and a higher value for more random responses. The default is0.95
.FLATTEN_JSON
: aBOOL
value that determines whether to return the generated text and the safety attributes in separate columns. The default isFALSE
.STOP_SEQUENCES
: anARRAY<STRING>
value that removes the specified strings if they are included in responses from the model. Strings are matched exactly, including capitalization. The default is an empty array.
The following example shows a request with these characteristics:
- Uses the
prompt
column of theprompts
table for the prompt. - Returns a short and moderately probable response.
- Returns the generated text and the safety attributes in separate columns.
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, TABLE mydataset.prompts, STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, 40 AS top_k, TRUE AS flatten_json_output));
Prompt query
Generate text by using a query to provide the prompt.
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, (PROMPT_QUERY), STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output, STOP_SEQUENCES AS stop_sequences) );
Replace the following:
PROJECT_ID
: your project ID.DATASET_ID
: the ID of the dataset that contains the model.MODEL_NAME
: the name of the model.PROMPT_QUERY
: a query that provides the prompt data.TOKENS
: anINT64
value that sets the maximum number of tokens that can be generated in the response. This value must be in the range[1,1024]
. Specify a lower value for shorter responses and a higher value for longer responses. The default is128
.TEMPERATURE
: aFLOAT64
value in the range[0.0,1.0]
that controls the degree of randomness in token selection. The default is0
.Lower values for
temperature
are good for prompts that require a more deterministic and less open-ended or creative response, while higher values fortemperature
can lead to more diverse or creative results. A value of0
fortemperature
is deterministic, meaning that the highest probability response is always selected.TOP_K
: anINT64
value in the range[1,40]
that determines the initial pool of tokens the model considers for selection. Specify a lower value for less random responses and a higher value for more random responses. The default is40
.TOP_P
: aFLOAT64
value in the range[0.0,1.0]
helps determine the probability of the tokens selected. Specify a lower value for less random responses and a higher value for more random responses. The default is0.95
.FLATTEN_JSON
: aBOOL
value that determines whether to return the generated text and the safety attributes in separate columns. The default isFALSE
.STOP_SEQUENCES
: anARRAY<STRING>
value that removes the specified strings if they are included in responses from the model. Strings are matched exactly, including capitalization. The default is an empty array.
Example 1
The following example shows a request with these characteristics:
- Prompts for a summary of the text in the
body
column of thearticles
table. - Returns a moderately long and more probable response.
- Returns the generated text and the safety attributes in separate columns.
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, ( SELECT CONCAT('Summarize this text', body) AS prompt FROM mydataset.articles ), STRUCT( 0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p, 15 AS top_k, TRUE AS flatten_json_output));
Example 2
The following example shows a request with these characteristics:
- Uses a query to create the prompt data by concatenating strings that provide prompt prefixes with table columns.
- Returns a short and moderately probable response.
- Doesn't return the generated text and the safety attributes in separate columns.
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_tuned_model`, ( SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt FROM mydataset.input_table ), STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, 30 AS top_k, FALSE AS flatten_json_output));