-
Notifications
You must be signed in to change notification settings - Fork 2.9k
feat(tpu): add tpu queued resources time bound sample. #9617
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 26 commits
b951997
9ee20d7
f0b8314
055d61e
d3e1dee
2253b54
d29a6b5
d832b31
6956852
478beaa
f6b76cc
ec13f4d
b804cc8
66ae551
6b14833
a63690f
e67b971
3c37ec0
0554808
adc1ac7
a53bcf5
8a49815
8e98108
b58fc0f
00642e6
1cb9ab5
5d86f58
b4db847
5321ce9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
/* | ||
* Copyright 2024 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. | ||
*/ | ||
|
||
package tpu; | ||
|
||
// [START tpu_queued_resources_time_bound] | ||
import com.google.cloud.tpu.v2alpha1.CreateQueuedResourceRequest; | ||
import com.google.cloud.tpu.v2alpha1.Node; | ||
import com.google.cloud.tpu.v2alpha1.QueuedResource; | ||
import com.google.cloud.tpu.v2alpha1.TpuClient; | ||
import com.google.protobuf.Duration; | ||
// Uncomment the following line to use Interval or Date | ||
//import com.google.protobuf.Timestamp; | ||
//import com.google.type.Interval; | ||
//import java.util.Date; | ||
//import java.time.Instant; | ||
import java.io.IOException; | ||
import java.util.concurrent.ExecutionException; | ||
|
||
public class CreateTimeBoundQueuedResource { | ||
|
||
public static void main(String[] args) | ||
throws IOException, ExecutionException, InterruptedException { | ||
// TODO(developer): Replace these variables before running the sample. | ||
// Project ID or project number of the Google Cloud project you want to create a node. | ||
String projectId = "YOUR_PROJECT_ID"; | ||
// The zone in which to create the TPU. | ||
// For more information about supported TPU types for specific zones, | ||
// see https://cloud.google.com/tpu/docs/regions-zones | ||
String zone = "europe-west4-a"; | ||
// The name for your TPU. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please match the description with the one in documentation. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thank you! Followed documentation for naming and description. |
||
String nodeName = "YOUR_NODE_ID"; | ||
// The accelerator type that specifies the version and size of the Cloud TPU you want to create. | ||
// For more information about supported accelerator types for each TPU version, | ||
// see https://cloud.google.com/tpu/docs/system-architecture-tpu-vm#versions. | ||
String tpuType = "v2-8"; | ||
// Software version that specifies the version of the TPU runtime to install. | ||
// For more information see https://cloud.google.com/tpu/docs/runtimes | ||
String tpuSoftwareVersion = "tpu-vm-tf-2.14.1"; | ||
// The name for your Queued Resource. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ditto. Please match the description with the one in documentation. |
||
String queuedResourceId = "QUEUED_RESOURCE_ID"; | ||
|
||
|
||
createTimeBoundQueuedResource(projectId, nodeName, | ||
queuedResourceId, zone, tpuType, tpuSoftwareVersion); | ||
} | ||
|
||
// Creates a Queued Resource with time bound configuration. | ||
public static QueuedResource createTimeBoundQueuedResource( | ||
String projectId, String nodeName, String queuedResourceName, | ||
String zone, String tpuType, String tpuSoftwareVersion) | ||
throws IOException, ExecutionException, InterruptedException { | ||
// Initialize client that will be used to send requests. This client only needs to be created | ||
// once, and can be reused for multiple requests. | ||
try (TpuClient tpuClient = TpuClient.create()) { | ||
// Define parent for requests | ||
String parent = String.format("projects/%s/locations/%s", projectId, zone); | ||
// Create a Duration object representing 6 hours. | ||
Duration validAfterDuration = Duration.newBuilder().setSeconds(6 * 3600).build(); | ||
// Uncomment the appropriate lines to use other time bound configurations | ||
// Duration validUntilDuration = Duration.newBuilder().setSeconds(6 * 3600).build(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would recommend removing this. It can be easily done with a single tweak to this sample. |
||
// String validAfterTime = "2024-10-14T09:00:00Z"; | ||
// String validUntilTime = "2024-12-14T09:00:00Z"; | ||
TetyanaYahodska marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
// Create a node | ||
Node node = | ||
Node.newBuilder() | ||
.setName(nodeName) | ||
.setAcceleratorType(tpuType) | ||
.setRuntimeVersion(tpuSoftwareVersion) | ||
.setQueuedResource( | ||
String.format( | ||
"projects/%s/locations/%s/queuedResources/%s", | ||
projectId, zone, queuedResourceName)) | ||
.build(); | ||
|
||
// Create queued resource | ||
QueuedResource queuedResource = | ||
QueuedResource.newBuilder() | ||
.setName(queuedResourceName) | ||
.setTpu( | ||
QueuedResource.Tpu.newBuilder() | ||
.addNodeSpec( | ||
QueuedResource.Tpu.NodeSpec.newBuilder() | ||
.setParent(parent) | ||
.setNode(node) | ||
.setNodeId(nodeName) | ||
.build()) | ||
.build()) | ||
.setQueueingPolicy( | ||
QueuedResource.QueueingPolicy.newBuilder() | ||
// You can specify a duration after which a resource should be allocated. | ||
// corresponds --valid-after-duration flag | ||
.setValidAfterDuration(validAfterDuration) | ||
.build()) | ||
// Uncomment the appropriate lines to use other time bound configurations | ||
//.setQueueingPolicy( | ||
//QueuedResource.QueueingPolicy.newBuilder() | ||
// You can specify a time after which a resource should be allocated. | ||
// corresponds --valid-until-duration flag | ||
//.setValidUntilDuration(validUntilDuration) | ||
//.build()) | ||
//.setQueueingPolicy( | ||
//QueuedResource.QueueingPolicy.newBuilder() | ||
// You can specify a time before which the resource should be allocated. | ||
// corresponds --valid-after-time flag | ||
TetyanaYahodska marked this conversation as resolved.
Show resolved
Hide resolved
|
||
//.setValidAfterTime(convertStringToTimestamp(validAfterTime)) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add this line below 106, and modify it to include the validAfterTime directly. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thank you! Fixed |
||
//.build()) | ||
//.setQueueingPolicy( | ||
//QueuedResource.QueueingPolicy.newBuilder() | ||
// You can specify a time after which the resource should be allocated. | ||
// corresponds --valid-until-time flag | ||
//.setValidUntilTime(convertStringToTimestamp(validUntilTime)) | ||
//.build()) | ||
//.setQueueingPolicy( | ||
//QueuedResource.QueueingPolicy.newBuilder() | ||
// You can specify a time interval before and after which | ||
// the resource should be allocated. | ||
//.setValidInterval( | ||
//Interval.newBuilder() | ||
//.setStartTime(convertStringToTimestamp(validAfterTime)) | ||
//.setEndTime(convertStringToTimestamp(validUntilTime)) | ||
//.build()) | ||
//.build()) | ||
TetyanaYahodska marked this conversation as resolved.
Show resolved
Hide resolved
|
||
.build(); | ||
|
||
CreateQueuedResourceRequest request = | ||
CreateQueuedResourceRequest.newBuilder() | ||
.setParent(parent) | ||
.setQueuedResource(queuedResource) | ||
.setQueuedResourceId(queuedResourceName) | ||
.build(); | ||
|
||
return tpuClient.createQueuedResourceAsync(request).get(); | ||
} | ||
} | ||
|
||
// Uncomment this method if you want to use time bound configurations | ||
// Method to convert a string timestamp to a Protobuf Timestamp object | ||
// private static Timestamp convertStringToTimestamp(String timestampString) { | ||
// Instant instant = Instant.parse(timestampString); | ||
// return Timestamp.newBuilder() | ||
// .setSeconds(instant.getEpochSecond()) | ||
// .setNanos(instant.getNano()) | ||
// .build(); | ||
// } | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove these. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thank you! Removed |
||
} | ||
// [END tpu_queued_resources_time_bound] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Commented out code is not the best practice. It makes a difficult dev experience in docs.
Please remove all the commented imports and code.
If you want to show more than one option, I've suggested a simpler format.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you! Fixed code