From bb76ec5cf122704b9eae6567a81a7ea916d36187 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Thu, 17 Dec 2020 16:32:14 -0800 Subject: [PATCH] feat: adds enhancements to library (#22) * feat: adds enhancements to library * chore: changes to synth.py * fix: broken pack n' play test * fix: add enhanced types to ts compiler * fix: project enabled * fix: adds docstrings to toValue(), fromValue() functions * fix: removing any * fix: edits to synth.py per reviewer * fix: add more test coverage * chore: added comment about conversion interface Co-authored-by: Sofia Leon --- ...-training-pipeline-image-classification.js | 135 ++++++++++++++++++ ai-platform/snippets/list-endpoints.js | 61 ++++++++ ai-platform/snippets/package.json | 4 +- .../snippets/predict-image-classification.js | 99 +++++++++++++ ai-platform/snippets/resources/daisy.jpg | Bin 0 -> 76076 bytes ...ning-pipeline-image-classification.test.js | 73 ++++++++++ .../test/predict-image-classification.test.js | 41 ++++++ ai-platform/snippets/test/quickstart.test.js | 2 +- 8 files changed, 413 insertions(+), 2 deletions(-) create mode 100644 ai-platform/snippets/create-training-pipeline-image-classification.js create mode 100644 ai-platform/snippets/list-endpoints.js create mode 100644 ai-platform/snippets/predict-image-classification.js create mode 100644 ai-platform/snippets/resources/daisy.jpg create mode 100644 ai-platform/snippets/test/create-training-pipeline-image-classification.test.js create mode 100644 ai-platform/snippets/test/predict-image-classification.test.js diff --git a/ai-platform/snippets/create-training-pipeline-image-classification.js b/ai-platform/snippets/create-training-pipeline-image-classification.js new file mode 100644 index 0000000000..a6c868ec30 --- /dev/null +++ b/ai-platform/snippets/create-training-pipeline-image-classification.js @@ -0,0 +1,135 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +function main( + datasetId, + modelDisplayName, + trainingPipelineDisplayName, + project, + location = 'us-central1' +) { + // [START aiplatform_create_training_pipeline_image_classification] + /** + * TODO(developer): Uncomment these variables before running the sample. + * (Not necessary if passing values as arguments) + */ + /* + const datasetId = 'YOUR DATASET'; + const modelDisplayName = 'NEW MODEL NAME; + const trainingPipelineDisplayName = 'NAME FOR TRAINING PIPELINE'; + const project = 'YOUR PROJECT ID'; + const location = 'us-central1'; + */ + // Imports the Google Cloud Pipeline Service Client library + const aiplatform = require('@google-cloud/aiplatform'); + + const { + definition, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.trainingjob; + const ModelType = definition.AutoMlImageClassificationInputs.ModelType; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiates a client + const pipelineServiceClient = new aiplatform.PipelineServiceClient( + clientOptions + ); + + async function createTrainingPipelineImageClassification() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + + // Values should match the input expected by your model. + const trainingTaskInputsMessage = new definition.AutoMlImageClassificationInputs( + { + multiLabel: true, + modelType: ModelType.CLOUD, + budgetMilliNodeHours: 8000, + disableEarlyStopping: false, + } + ); + + const trainingTaskInputs = trainingTaskInputsMessage.toValue(); + + const trainingTaskDefinition = + 'gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_image_classification_1.0.0.yaml'; + + const modelToUpload = {displayName: modelDisplayName}; + const inputDataConfig = {datasetId: datasetId}; + const trainingPipeline = { + displayName: trainingPipelineDisplayName, + trainingTaskDefinition, + trainingTaskInputs, + inputDataConfig: inputDataConfig, + modelToUpload: modelToUpload, + }; + const request = { + parent, + trainingPipeline, + }; + + // Create training pipeline request + const [response] = await pipelineServiceClient.createTrainingPipeline( + request + ); + + console.log('Create training pipeline image classification response'); + console.log(`\tName : ${response.name}`); + console.log(`\tDisplay Name : ${response.displayName}`); + console.log( + `\tTraining task definition : ${response.trainingTaskDefinition}` + ); + console.log( + `\tTraining task inputs : \ + ${JSON.stringify(response.trainingTaskInputs)}` + ); + console.log( + `\tTraining task metadata : \ + ${JSON.stringify(response.trainingTaskMetadata)}` + ); + console.log(`\tState ; ${response.state}`); + console.log(`\tCreate time : ${JSON.stringify(response.createTime)}`); + console.log(`\tStart time : ${JSON.stringify(response.startTime)}`); + console.log(`\tEnd time : ${JSON.stringify(response.endTime)}`); + console.log(`\tUpdate time : ${JSON.stringify(response.updateTime)}`); + console.log(`\tLabels : ${JSON.stringify(response.labels)}`); + + const error = response.error; + console.log('\tError'); + if (error === null) { + console.log('\t\tCode : {}'); + console.log('\t\tMessage : {}'); + } else { + console.log(`\t\tCode : ${error.code}`); + console.log(`\t\tMessage : ${error.message}`); + } + } + + createTrainingPipelineImageClassification(); + // [END aiplatform_create_training_pipeline_image_classification] +} + +process.on('unhandledRejection', err => { + console.error(err.message); + process.exitCode = 1; +}); + +main(...process.argv.slice(2)); diff --git a/ai-platform/snippets/list-endpoints.js b/ai-platform/snippets/list-endpoints.js new file mode 100644 index 0000000000..14738adbeb --- /dev/null +++ b/ai-platform/snippets/list-endpoints.js @@ -0,0 +1,61 @@ +/** + * Copyright 2020, Google, LLC. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +function main(projectId, location = 'us-central1') { + // [START aiplatform_list_endpoints] + /** + * TODO(developer): Uncomment these variables before running the sample. + */ + // const projectId = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + + const {EndpointServiceClient} = require('@google-cloud/aiplatform'); + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + const client = new EndpointServiceClient(clientOptions); + + async function listEndpoints() { + // Configure the parent resource + const parent = `projects/${projectId}/locations/${location}`; + const request = { + parent, + }; + + // Get and print out a list of all the endpoints for this resource + const [result] = await client.listEndpoints(request); + for (const endpoint of result) { + console.log(`\nEndpoint name: ${endpoint.name}`); + console.log(`Display name: ${endpoint.displayName}`); + if (endpoint.deployedModels[0]) { + console.log( + `First deployed model: ${endpoint.deployedModels[0].model}` + ); + } + } + } + + listEndpoints(); + // [END aiplatform_list_endpoints] +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/ai-platform/snippets/package.json b/ai-platform/snippets/package.json index ac49bd1ee7..1c716f0843 100644 --- a/ai-platform/snippets/package.json +++ b/ai-platform/snippets/package.json @@ -16,6 +16,8 @@ "@google-cloud/aiplatform": "^1.0.0" }, "devDependencies": { - "mocha": "^8.0.0" + "chai": "^4.2.0", + "mocha": "^8.0.0", + "uuid": "^8.3.1" } } diff --git a/ai-platform/snippets/predict-image-classification.js b/ai-platform/snippets/predict-image-classification.js new file mode 100644 index 0000000000..1d83e80e9b --- /dev/null +++ b/ai-platform/snippets/predict-image-classification.js @@ -0,0 +1,99 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +function main(filename, endpointId, project, location = 'us-central1') { + // [START aiplatform_predict_image_classification] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const filename = "YOUR_PREDICTION_FILE_NAME"; + // const endpointId = "YOUR_ENDPOINT_ID"; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + instance, + params, + prediction, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.predict; + + // Imports the Google Cloud Prediction Service Client library + const {PredictionServiceClient} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-prediction-aiplatform.googleapis.com', + }; + + // Instantiates a client + const predictionServiceClient = new PredictionServiceClient(clientOptions); + + async function predictImageClassification() { + // Configure the endpoint resource + const endpoint = `projects/${project}/locations/${location}/endpoints/${endpointId}`; + + const parametersObj = new params.ImageClassificationPredictionParams({ + confidenceThreshold: 0.5, + maxPredictions: 5, + }); + const parameters = parametersObj.toValue(); + + const fs = require('fs'); + const image = fs.readFileSync(filename, 'base64'); + const instanceObj = new instance.ImageClassificationPredictionInstance({ + content: image, + }); + const instanceValue = instanceObj.toValue(); + + const instances = [instanceValue]; + const request = { + endpoint, + instances, + parameters, + }; + + // Predict request + const [response] = await predictionServiceClient.predict(request); + + console.log('Predict image classification response'); + console.log(`\tDeployed model id : ${response.deployedModelId}`); + const predictions = response.predictions; + console.log('\tPredictions :'); + for (const predictionValue of predictions) { + const predictionResultObj = prediction.ClassificationPredictionResult.fromValue( + predictionValue + ); + for (const [i, label] of predictionResultObj.displayNames.entries()) { + console.log(`\tDisplay name: ${label}`); + console.log(`\tConfidences: ${predictionResultObj.confidences[i]}`); + console.log(`\tIDs: ${predictionResultObj.ids[i]}\n\n`); + } + } + } + predictImageClassification(); + // [END aiplatform_predict_image_classification] +} + +process.on('unhandledRejection', err => { + console.error(err.message); + process.exitCode = 1; +}); + +main(...process.argv.slice(2)); diff --git a/ai-platform/snippets/resources/daisy.jpg b/ai-platform/snippets/resources/daisy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae01cae918365637aa3ac44bfb052fb86a964441 GIT binary patch literal 76076 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

P&A^o`)gR|ea8V&AzxH`){L&td}kdoe;WRl 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 Z_k--s^M)thNP6J(pJM)R=kW2z|Jl>KiNpW^ literal 0 HcmV?d00001 diff --git a/ai-platform/snippets/test/create-training-pipeline-image-classification.test.js b/ai-platform/snippets/test/create-training-pipeline-image-classification.test.js new file mode 100644 index 0000000000..c6c506e022 --- /dev/null +++ b/ai-platform/snippets/test/create-training-pipeline-image-classification.test.js @@ -0,0 +1,73 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const {assert} = require('chai'); +const {after, describe, it} = require('mocha'); + +const uuid = require('uuid').v4; +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); + +const aiplatform = require('@google-cloud/aiplatform'); +const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', +}; + +const pipelineServiceClient = new aiplatform.PipelineServiceClient( + clientOptions +); + +const datasetId = process.env.TRAINING_PIPELINE_IMAGE_CLASS_DATASET_ID; +const modelDisplayName = `temp_create_training_pipeline_image_classification_model_test${uuid()}`; +const trainingPipelineDisplayName = `temp_create_training_pipeline_image_classification_test_${uuid()}`; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +let trainingPipelineId; + +describe('AI platform create training pipeline image classification', () => { + it('should create a new image classification training pipeline', async () => { + const stdout = execSync( + `node ./create-training-pipeline-image-classification.js ${datasetId} ${modelDisplayName} ${trainingPipelineDisplayName} ${project} ${location}` + ); + assert.match(stdout, /\/locations\/us-central1\/trainingPipelines\//); + trainingPipelineId = stdout + .split('/locations/us-central1/trainingPipelines/')[1] + .split('\n')[0]; + }); + + after('should cancel the training pipeline and delete it', async () => { + const name = pipelineServiceClient.trainingPipelinePath( + project, + location, + trainingPipelineId + ); + + const cancelRequest = { + name, + }; + + pipelineServiceClient.cancelTrainingPipeline(cancelRequest).then(() => { + const deleteRequest = { + name, + }; + + return pipelineServiceClient.deleteTrainingPipeline(deleteRequest); + }); + }); +}); diff --git a/ai-platform/snippets/test/predict-image-classification.test.js b/ai-platform/snippets/test/predict-image-classification.test.js new file mode 100644 index 0000000000..f2e8aa1493 --- /dev/null +++ b/ai-platform/snippets/test/predict-image-classification.test.js @@ -0,0 +1,41 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {describe, it} = require('mocha'); + +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); + +const filename = 'daisy.jpg'; +const local_file = path.resolve( + path.join(__dirname, `../resources/${filename}`) +); +const endpointId = process.env.PREDICT_IMAGE_CLASS_ENDPOINT_ID; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +describe('AI platform predict image classification', () => { + it('should make predictions using the image classification model', async () => { + const stdout = execSync( + `node ./predict-image-classification.js ${local_file} ${endpointId} ${project} ${location}` + ); + assert.match(stdout, /Predict image classification response/); + }); +}); diff --git a/ai-platform/snippets/test/quickstart.test.js b/ai-platform/snippets/test/quickstart.test.js index 07fb1e0544..524df65f57 100644 --- a/ai-platform/snippets/test/quickstart.test.js +++ b/ai-platform/snippets/test/quickstart.test.js @@ -23,7 +23,7 @@ const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); describe('quickstart', () => { it('should have functional quickstart', async () => { - const stdout = execSync('node quickstart'); + const stdout = execSync('node quickstart.js'); assert(stdout.match(/DatasetServiceClient/)); }); });