1+ /*
2+ * Copyright 2024 Google LLC
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+
17+ package tpu ;
18+
19+ //[START tpu_queued_resources_startup_script]
20+ import com .google .cloud .tpu .v2alpha1 .CreateQueuedResourceRequest ;
21+ import com .google .cloud .tpu .v2alpha1 .Node ;
22+ import com .google .cloud .tpu .v2alpha1 .QueuedResource ;
23+ import com .google .cloud .tpu .v2alpha1 .TpuClient ;
24+ import java .io .IOException ;
25+ import java .util .HashMap ;
26+ import java .util .Map ;
27+ import java .util .concurrent .ExecutionException ;
28+
29+ public class CreateQueuedResourceWithStartupScript {
30+ public static void main (String [] args )
31+ throws IOException , ExecutionException , InterruptedException {
32+ // TODO(developer): Replace these variables before running the sample.
33+ // Project ID or project number of the Google Cloud project you want to create a node.
34+ String projectId = "YOUR_PROJECT_ID" ;
35+ // The zone in which to create the TPU.
36+ // For more information about supported TPU types for specific zones,
37+ // see https://cloud.google.com/tpu/docs/regions-zones
38+ String zone = "us-central1-a" ;
39+ // The name for your TPU.
40+ String nodeName = "YOUR_TPU_NAME" ;
41+ // The accelerator type that specifies the version and size of the Cloud TPU you want to create.
42+ // For more information about supported accelerator types for each TPU version,
43+ // see https://cloud.google.com/tpu/docs/system-architecture-tpu-vm#versions.
44+ String tpuType = "v2-8" ;
45+ // Software version that specifies the version of the TPU runtime to install.
46+ // For more information see https://cloud.google.com/tpu/docs/runtimes
47+ String tpuSoftwareVersion = "tpu-vm-tf-2.14.1" ;
48+ // The name for your Queued Resource.
49+ String queuedResourceId = "QUEUED_RESOURCE_ID" ;
50+
51+ createQueuedResource (projectId , zone , queuedResourceId , nodeName ,
52+ tpuType , tpuSoftwareVersion );
53+ }
54+
55+ // Creates a Queued Resource with startup script.
56+ public static QueuedResource createQueuedResource (
57+ String projectId , String zone , String queuedResourceId ,
58+ String nodeName , String tpuType , String tpuSoftwareVersion )
59+ throws IOException , ExecutionException , InterruptedException {
60+ String parent = String .format ("projects/%s/locations/%s" , projectId , zone );
61+ String startupScriptContent = "#!/bin/bash\n echo \" Hello from the startup script!\" " ;
62+ // Add startup script to metadata
63+ Map <String , String > metadata = new HashMap <>();
64+ metadata .put ("startup-script" , startupScriptContent );
65+ String queuedResourceForTpu = String .format ("projects/%s/locations/%s/queuedResources/%s" ,
66+ projectId , zone , queuedResourceId );
67+ // Initialize client that will be used to send requests. This client only needs to be created
68+ // once, and can be reused for multiple requests.
69+ try (TpuClient tpuClient = TpuClient .create ()) {
70+ Node node =
71+ Node .newBuilder ()
72+ .setName (nodeName )
73+ .setAcceleratorType (tpuType )
74+ .setRuntimeVersion (tpuSoftwareVersion )
75+ .setQueuedResource (queuedResourceForTpu )
76+ .putAllMetadata (metadata )
77+ .build ();
78+
79+ QueuedResource queuedResource =
80+ QueuedResource .newBuilder ()
81+ .setName (queuedResourceId )
82+ .setTpu (
83+ QueuedResource .Tpu .newBuilder ()
84+ .addNodeSpec (
85+ QueuedResource .Tpu .NodeSpec .newBuilder ()
86+ .setParent (parent )
87+ .setNode (node )
88+ .setNodeId (nodeName )
89+ .build ())
90+ .build ())
91+ .build ();
92+
93+ CreateQueuedResourceRequest request =
94+ CreateQueuedResourceRequest .newBuilder ()
95+ .setParent (parent )
96+ .setQueuedResourceId (queuedResourceId )
97+ .setQueuedResource (queuedResource )
98+ .build ();
99+ // You can wait until TPU Node is READY,
100+ // and check its status using getTpuVm() from "tpu_vm_get" sample.
101+
102+ return tpuClient .createQueuedResourceAsync (request ).get ();
103+ }
104+ }
105+ }
106+ // [END tpu_queued_resources_startup_script]
0 commit comments