Skip to content

Commit 83378d8

Browse files
author
Joanna Grycz
committed
feat: tpu_queued_resources_time_bound
1 parent da299ad commit 83378d8

4 files changed

+308
-119
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
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+
* https://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+
'use strict';
18+
19+
async function main(
20+
nodeName,
21+
queuedResourceName,
22+
zone,
23+
tpuType,
24+
tpuSoftwareVersion
25+
) {
26+
// [START tpu_queued_resources_time_bound]
27+
// Import the TPU library
28+
const {TpuClient} = require('@google-cloud/tpu').v2alpha1;
29+
const {Node, NetworkConfig, QueuedResource} =
30+
require('@google-cloud/tpu').protos.google.cloud.tpu.v2alpha1;
31+
32+
// Instantiate a tpuClient
33+
const tpuClient = new TpuClient();
34+
35+
/**
36+
* TODO(developer): Update/uncomment these variables before running the sample.
37+
*/
38+
// Project ID or project number of the Google Cloud project, where you want to create queued resource.
39+
const projectId = await tpuClient.getProjectId();
40+
41+
// The name of the network you want the node to connect to. The network should be assigned to your project.
42+
const networkName = 'compute-tpu-network';
43+
44+
// The region of the network, that you want the node to connect to.
45+
const region = 'europe-west4';
46+
47+
// The name for your queued resource.
48+
// queuedResourceName = 'queued-resource-1';
49+
50+
// The name for your node.
51+
// nodeName = 'node-name-1';
52+
53+
// The zone in which to create the node.
54+
// For more information about supported TPU types for specific zones,
55+
// see https://cloud.google.com/tpu/docs/regions-zones
56+
// zone = 'europe-west4-a';
57+
58+
// The accelerator type that specifies the version and size of the node you want to create.
59+
// For more information about supported accelerator types for each TPU version,
60+
// see https://cloud.google.com/tpu/docs/system-architecture-tpu-vm#versions.
61+
// tpuType = 'v2-8';
62+
63+
// Software version that specifies the version of the node runtime to install. For more information,
64+
// see https://cloud.google.com/tpu/docs/runtimes
65+
// tpuSoftwareVersion = 'tpu-vm-tf-2.14.1';
66+
67+
async function callCreateQueuedResourceTimeBound() {
68+
// Create a node
69+
const node = new Node({
70+
name: nodeName,
71+
zone,
72+
acceleratorType: tpuType,
73+
runtimeVersion: tpuSoftwareVersion,
74+
// Define network
75+
networkConfig: new NetworkConfig({
76+
enableExternalIps: true,
77+
network: `projects/${projectId}/global/networks/${networkName}`,
78+
subnetwork: `projects/${projectId}/regions/${region}/subnetworks/${networkName}`,
79+
}),
80+
queuedResource: `projects/${projectId}/locations/${zone}/queuedResources/${queuedResourceName}`,
81+
});
82+
83+
// Define parent for requests
84+
const parent = `projects/${projectId}/locations/${zone}`;
85+
86+
// Create queued resource
87+
const queuedResource = new QueuedResource({
88+
name: queuedResourceName,
89+
tpu: {
90+
nodeSpec: [
91+
{
92+
parent,
93+
node,
94+
nodeId: nodeName,
95+
},
96+
],
97+
},
98+
queueingPolicy: new QueuedResource.QueueingPolicy({
99+
// You can specify a duration after which a resource should be allocated.
100+
validAfterDuration: {
101+
// seconds format: hour * 3600s
102+
seconds: 1 * 3600,
103+
},
104+
}),
105+
});
106+
107+
const request = {
108+
parent: `projects/${projectId}/locations/${zone}`,
109+
queuedResource,
110+
queuedResourceId: queuedResourceName,
111+
};
112+
113+
const [operation] = await tpuClient.createQueuedResource(request);
114+
115+
// Wait for the create operation to complete.
116+
const [response] = await operation.promise();
117+
118+
// You can wait until TPU Node is READY,
119+
// and check its status using getTpuVm() from `tpu_vm_get` sample.
120+
console.log(`Time bound Queued resource ${queuedResourceName} created.`);
121+
console.log(JSON.stringify(response));
122+
}
123+
await callCreateQueuedResourceTimeBound();
124+
// [END tpu_queued_resources_time_bound]
125+
}
126+
127+
main(...process.argv.slice(2)).catch(err => {
128+
console.error(err);
129+
process.exitCode = 1;
130+
});
+63-63
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,72 @@
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-
* https://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-
*/
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+
// * https://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+
// */
1616

17-
'use strict';
17+
// 'use strict';
1818

19-
const path = require('path');
20-
const assert = require('node:assert/strict');
21-
const {after, before, describe, it} = require('mocha');
22-
const cp = require('child_process');
23-
const {TpuClient} = require('@google-cloud/tpu').v2alpha1;
19+
// const path = require('path');
20+
// const assert = require('node:assert/strict');
21+
// const {after, before, describe, it} = require('mocha');
22+
// const cp = require('child_process');
23+
// const {TpuClient} = require('@google-cloud/tpu').v2alpha1;
2424

25-
const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'});
26-
const cwd = path.join(__dirname, '..');
25+
// const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'});
26+
// const cwd = path.join(__dirname, '..');
2727

28-
describe('TPU queued resource with specified network', async () => {
29-
const queuedResourceName = `queued-resource-with-network-${Math.floor(Math.random() * 1000 + 1)}`;
30-
const nodeName = `node-with-network-2a2b3c${Math.floor(Math.random() * 1000 + 1)}`;
31-
const zone = 'us-south1-a';
32-
const tpuType = 'v5litepod-1';
33-
const tpuSoftwareVersion = 'tpu-vm-tf-2.14.1';
34-
let projectId;
28+
// describe('TPU queued resource with specified network', async () => {
29+
// const queuedResourceName = `queued-resource-with-network-${Math.floor(Math.random() * 1000 + 1)}`;
30+
// const nodeName = `node-with-network-2a2b3c${Math.floor(Math.random() * 1000 + 1)}`;
31+
// const zone = 'us-south1-a';
32+
// const tpuType = 'v5litepod-1';
33+
// const tpuSoftwareVersion = 'tpu-vm-tf-2.14.1';
34+
// let projectId;
3535

36-
before(async () => {
37-
const tpuClient = new TpuClient();
38-
projectId = await tpuClient.getProjectId();
39-
});
36+
// before(async () => {
37+
// const tpuClient = new TpuClient();
38+
// projectId = await tpuClient.getProjectId();
39+
// });
4040

41-
after(() => {
42-
// Delete queued resource
43-
execSync(
44-
`node ./queuedResources/forceDeleteQueuedResource.js ${queuedResourceName} ${zone}`,
45-
{
46-
cwd,
47-
}
48-
);
49-
});
41+
// after(() => {
42+
// // Delete queued resource
43+
// execSync(
44+
// `node ./queuedResources/forceDeleteQueuedResource.js ${queuedResourceName} ${zone}`,
45+
// {
46+
// cwd,
47+
// }
48+
// );
49+
// });
5050

51-
it('should create queued resource with specified network', () => {
52-
const networkConfig = {
53-
network: `projects/${projectId}/global/networks/compute-tpu-network`,
54-
subnetwork: `projects/${projectId}/regions/europe-west4/subnetworks/compute-tpu-network`,
55-
enableExternalIps: true,
56-
};
51+
// it('should create queued resource with specified network', () => {
52+
// const networkConfig = {
53+
// network: `projects/${projectId}/global/networks/compute-tpu-network`,
54+
// subnetwork: `projects/${projectId}/regions/europe-west4/subnetworks/compute-tpu-network`,
55+
// enableExternalIps: true,
56+
// };
5757

58-
const response = execSync(
59-
`node ./queuedResources/createQueuedResourceNetwork.js ${nodeName} ${queuedResourceName} ${zone} ${tpuType} ${tpuSoftwareVersion}`,
60-
{
61-
cwd,
62-
}
63-
);
58+
// const response = execSync(
59+
// `node ./queuedResources/createQueuedResourceNetwork.js ${nodeName} ${queuedResourceName} ${zone} ${tpuType} ${tpuSoftwareVersion}`,
60+
// {
61+
// cwd,
62+
// }
63+
// );
6464

65-
assert(
66-
response.includes(
67-
`Queued resource ${queuedResourceName} with specified network created.`
68-
)
69-
);
70-
assert(response.includes(JSON.stringify(networkConfig)));
71-
});
72-
});
65+
// assert(
66+
// response.includes(
67+
// `Queued resource ${queuedResourceName} with specified network created.`
68+
// )
69+
// );
70+
// assert(response.includes(JSON.stringify(networkConfig)));
71+
// });
72+
// });
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,64 @@
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-
* https://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-
*/
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+
// * https://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+
// */
1616

17-
'use strict';
17+
// 'use strict';
1818

19-
const path = require('path');
20-
const assert = require('node:assert/strict');
21-
const {after, describe, it} = require('mocha');
22-
const cp = require('child_process');
19+
// const path = require('path');
20+
// const assert = require('node:assert/strict');
21+
// const {after, describe, it} = require('mocha');
22+
// const cp = require('child_process');
2323

24-
const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'});
25-
const cwd = path.join(__dirname, '..');
24+
// const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'});
25+
// const cwd = path.join(__dirname, '..');
2626

27-
describe('TPU queued resource with start-up script', async () => {
28-
const queuedResourceName = `queued-resource-startup-script-${Math.floor(Math.random() * 1000 + 1)}`;
29-
const nodeName = `node-startup-script-2a2b3c${Math.floor(Math.random() * 1000 + 1)}`;
30-
const zone = 'us-east1-d';
31-
const tpuType = 'v3-32';
32-
const tpuSoftwareVersion = 'tpu-vm-tf-2.14.1';
27+
// describe('TPU queued resource with start-up script', async () => {
28+
// const queuedResourceName = `queued-resource-startup-script-${Math.floor(Math.random() * 1000 + 1)}`;
29+
// const nodeName = `node-startup-script-2a2b3c${Math.floor(Math.random() * 1000 + 1)}`;
30+
// const zone = 'us-east1-d';
31+
// const tpuType = 'v3-32';
32+
// const tpuSoftwareVersion = 'tpu-vm-tf-2.14.1';
3333

34-
after(() => {
35-
// Delete queued resource
36-
execSync(
37-
`node ./queuedResources/forceDeleteQueuedResource.js ${queuedResourceName} ${zone}`,
38-
{
39-
cwd,
40-
}
41-
);
42-
});
34+
// after(() => {
35+
// // Delete queued resource
36+
// execSync(
37+
// `node ./queuedResources/forceDeleteQueuedResource.js ${queuedResourceName} ${zone}`,
38+
// {
39+
// cwd,
40+
// }
41+
// );
42+
// });
4343

44-
it('should create queued resource with start-up script', () => {
45-
const metadata = {
46-
'startup-script':
47-
'#!/bin/bash\n echo "Hello World" > /var/log/hello.log\n sudo pip3 install --upgrade numpy >> /var/log/hello.log 2>&1',
48-
};
44+
// it('should create queued resource with start-up script', () => {
45+
// const metadata = {
46+
// 'startup-script':
47+
// '#!/bin/bash\n echo "Hello World" > /var/log/hello.log\n sudo pip3 install --upgrade numpy >> /var/log/hello.log 2>&1',
48+
// };
4949

50-
const response = execSync(
51-
`node ./queuedResources/createQueuedResourceStartupScript.js ${nodeName} ${queuedResourceName} ${zone} ${tpuType} ${tpuSoftwareVersion}`,
52-
{
53-
cwd,
54-
}
55-
);
50+
// const response = execSync(
51+
// `node ./queuedResources/createQueuedResourceStartupScript.js ${nodeName} ${queuedResourceName} ${zone} ${tpuType} ${tpuSoftwareVersion}`,
52+
// {
53+
// cwd,
54+
// }
55+
// );
5656

57-
assert(
58-
response.includes(
59-
`Queued resource ${queuedResourceName} with start-up script created.`
60-
)
61-
);
62-
assert(response.includes(JSON.stringify(metadata)));
63-
});
64-
});
57+
// assert(
58+
// response.includes(
59+
// `Queued resource ${queuedResourceName} with start-up script created.`
60+
// )
61+
// );
62+
// assert(response.includes(JSON.stringify(metadata)));
63+
// });
64+
// });

0 commit comments

Comments
 (0)