我设法创建了一个实例并通过 ssh 进入其中。但是,我有几个关于 Google Compute Engine 的问题。
- 我了解我将按我的实例运行时间付费。直到我退出实例。我的理解正确吗?
- 我希望在我的实例上运行一些批处理作业(java 程序)。如何让我的实例在作业完成后自动停止(这样我就不会因为它可能运行的额外时间而被收费)
- 如果我启动作业并断开我的 PC,作业会继续在实例上运行吗?
问候, 阿西姆
我设法创建了一个实例并通过 ssh 进入其中。但是,我有几个关于 Google Compute Engine 的问题。
问候, 阿西姆
正确,实例按其运行时间收费。(到分钟,最少 10 分钟)。实例从通过 API 启动到通过 API 停止运行。任何用户是否通过 SSH 登录都没有关系。对于大多数自动化用例,用户从不登录——程序是通过启动脚本安装和启动的。
您可以通过Cloud Console查看正在运行的实例,以确认当前是否正在运行。
如果要从实例内部停止实例,最简单的方法是使用 compute-rw服务帐户范围启动实例并使用 gcutil。
例如,要使用 compute-rw 范围从命令行启动您的实例:
$ gcutil --project=<project-id> addinstance <instance name> --service_account_scopes=compute-rw
(这是通过 Cloud Console 手动创建实例时的默认设置)
稍后,在您的批处理作业完成后,您可以从实例内部删除该实例:
$ gcutil deleteinstance -f <instance name>
您可以将暂停命令放在批处理脚本的末尾(假设您在永久磁盘上输出结果)。暂停后,实例将处于 TERMINATED 状态,您不会被收费。请参阅https://developers.google.com/compute/docs/pricing 向下滚动到“实例正常运行时间”
您可以在模型训练后自动关闭实例。模型训练完成后,只需运行几行额外的代码。
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
service = discovery.build('compute', 'v1', credentials=credentials)
# Project ID for this request.
project = 'xyz' # Project ID
# The name of the zone for this request.
zone = 'xyz' # Zone information
# Name of the instance resource to stop.
instance = 'xyz' # instance id
request = service.instances().stop(project=project, zone=zone, instance=instance)
response = request.execute()
将此添加到您的模型训练脚本中。训练完成后,GCP 实例会自动关闭。官网更多信息: https ://cloud.google.com/compute/docs/reference/rest/v1/instances/stop
如果要使用 python 脚本停止实例,可以按照以下方式进行:
from google.cloud.compute_v1.services.instances import InstancesClient
from google.oauth2 import service_account
instance_client = InstancesClient().from_service_account_file(<location-path>)
zone = <zone>
project = <project>
instance = <instance_id>
instance_client.stop(project=project, instance=instance, zone=zone)
在上面的脚本中,我假设您正在使用服务帐户进行身份验证。有关使用的库的文档,您可以访问此处: https ://googleapis.dev/python/compute/latest/compute_v1/instances.html