随着客户加速向云迁移并实现业务转型,一些客户发现自己必须在多云环境中管理 IT 运营。 例如,您可能收购了一家已经在不同云提供商上运行的公司,或者您可能拥有一个通过 AWS 提供的独特功能产生价值的工作负载。 另一个例子是独立软件供应商 (ISV),它们在不同的云平台上提供其产品和服务,以使最终客户受益。 或者,组织可能在主要云提供商不可用的区域中运营,并且为了满足数据主权或数据驻留要求,他们可以使用辅助云提供商。
在这些场景中,当您开始将生成式人工智能、大型语言模型 (LLM) 和机器学习 (ML) 技术作为您业务的核心部分时,您可能正在寻找利用这些技术的选项 AWS 人工智能和机器学习 多云环境中 AWS 之外的功能。 例如,您可能想利用 亚马逊SageMaker 构建和训练 ML 模型,或使用 亚马逊 SageMaker 快速启动 部署预构建的基础或第三方 ML 模型,只需单击几个按钮即可部署。 或者您可能想利用 亚马逊基岩 构建和扩展生成式人工智能应用程序,或者您可以利用 AWS 的预训练 AI 服务,这不需要您学习机器学习技能。 AWS 为组织想要的场景提供支持 将他们自己的模型引入 Amazon SageMaker or 进入 Amazon SageMaker Canvas 进行预测.
在这篇文章中,我们演示了您必须在多云环境中利用 AWS 最广泛、最深入的 AI/ML 功能集的众多选项之一。 我们展示了如何在 AWS 中构建和训练 ML 模型,以及如何在另一个平台中部署该模型。 我们使用 Amazon SageMaker 训练模型,将模型工件存储在 亚马逊简单存储服务 (Amazon S3),并在 Azure 中部署并运行模型。 如果您使用 AWS 机器学习服务来获得最全面的功能集,但在我们讨论过的情况之一中您需要在另一个云提供商中运行您的模型,则这种方法非常有用。
关键概念
亚马逊SageMaker Studio 是一个基于 Web 的机器学习集成开发环境 (IDE)。 SageMaker Studio 允许数据科学家、机器学习工程师和数据工程师在一个 Web 界面上准备数据、构建、训练和部署机器学习模型。 借助 SageMaker Studio,您可以访问适用于 ML 开发生命周期每个阶段的专用工具,从数据准备到构建、训练和部署 ML 模型,从而将数据科学团队的工作效率提高多达十倍。 SageMaker Studio 笔记本 是快速启动的协作笔记本,可与 SageMaker 和其他 AWS 服务中的专用 ML 工具集成。
SageMaker 是一项全面的 ML 服务,使业务分析师、数据科学家和 MLOps 工程师能够为任何用例构建、训练和部署 ML 模型,无论 ML 专业知识如何。
AWS 提供 深度学习容器 适用于 PyTorch、TensorFlow 和 Apache MXNet 等流行 ML 框架的 (DLC),您可以将其与 SageMaker 一起使用来进行训练和推理。 DLC 可作为 Docker 镜像使用 Amazon Elastic Container注册 (亚马逊 ECR)。 Docker 映像已使用最新版本的流行深度学习框架以及训练和推理所需的其他依赖项进行预安装和测试。 有关 SageMaker 管理的预构建 Docker 映像的完整列表,请参阅 Docker 注册表路径和示例代码。 Amazon ECR 支持安全扫描,并集成 亚马逊检查员 漏洞管理服务,以满足您组织的映像合规性安全要求,并自动执行漏洞评估扫描。 组织也可以使用 AWS 培训 和 AWS 推理 为运行 ML 训练作业或推理提供更好的性价比。
解决方案概述
在本部分中,我们将介绍如何使用 SageMaker 构建和训练模型并将模型部署到 Azure Functions。 我们使用 SageMaker Studio 笔记本来构建、训练和部署模型。 我们使用预先构建的 PyTorch Docker 镜像在 SageMaker 中训练模型。 虽然在本例中我们将经过训练的模型部署到 Azure,但您可以使用相同的方法在其他平台(例如本地或其他云平台)上部署模型。
当我们创建训练作业时,SageMaker 会启动 ML 计算实例并使用我们的训练代码和训练数据集来训练模型。 它将生成的模型工件和其他输出保存在我们指定为训练作业的输入的 S3 存储桶中。 当模型训练完成后,我们使用 开放式神经网络交换 (ONNX) 运行时库,用于将 PyTorch 模型导出为 ONNX 模型。
最后,我们使用 Azure CLI 将 ONNX 模型以及用 Python 编写的自定义推理代码部署到 Azure Functions。 ONNX 支持大多数 常用的ML框架和工具。 需要注意的一件事是,如果您想使用不同的目标部署框架(例如 PyTorch 到 TensorFlow),将 ML 模型转换为 ONNX 非常有用。 如果您在源和目标上使用相同的框架,则无需将模型转换为 ONNX 格式。
下图说明了此方法的架构。
我们使用 SageMaker Studio 笔记本以及 SageMaker Python 开发工具包 构建和训练我们的模型。 SageMaker Python SDK 是一个开源库,用于在 SageMaker 上训练和部署 ML 模型。 欲了解更多详情,请参阅 创建或打开 Amazon SageMaker Studio 笔记本.
以下部分中的代码片段已使用 Data Science 3.0 映像和 Python 3.0 内核在 SageMaker Studio 笔记本环境中进行了测试。
在此解决方案中,我们演示了以下步骤:
- 训练 PyTorch 模型。
- 将 PyTorch 模型导出为 ONNX 模型。
- 打包模型和推理代码。
- 将模型部署到 Azure Functions。
先决条件
您应该具备以下先决条件:
- 一个 AWS 账户。
- SageMaker 域和 SageMaker Studio 用户。 有关创建这些的说明,请参阅 使用快速设置载入 Amazon SageMaker 域.
- Azure CLI。
- 访问 Azure 以及有权创建和管理 Azure Functions 的服务主体的凭据。
使用 PyTorch 训练模型
在本节中,我们将详细介绍训练 PyTorch 模型的步骤。
安装依赖关系
安装库以执行模型训练和模型部署所需的步骤:
pip install torchvision onnx onnxruntime
完成初始设置
我们首先导入 适用于Python的AWS开发工具包(Boto3) 和 SageMaker Python 开发工具包。 作为设置的一部分,我们定义以下内容:
- 一个会话对象,在 SageMaker 和我们自己的帐户上下文中提供便捷的方法。
- SageMaker 角色 ARN 用于将权限委托给培训和托管服务。 我们需要这个,以便这些服务可以访问存储我们的数据和模型的 S3 存储桶。 有关创建满足您的业务需求的角色的说明,请参阅 SageMaker 角色。 对于本文,我们使用与 Studio 笔记本实例相同的执行角色。 我们通过调用获得这个角色
sagemaker.get_execution_role()
. - 我们的训练作业将运行的默认区域。
- 我们用来存储模型输出的默认存储桶和前缀。
请参见以下代码:
import sagemaker
import boto3
import os execution_role = sagemaker.get_execution_role()
region = boto3.Session().region_name
session = sagemaker.Session()
bucket = session.default_bucket()
prefix = "sagemaker/mnist-pytorch"
创建训练数据集
我们使用公共存储桶中可用的数据集 sagemaker-example-files-prod-{region}
. 数据集包含以下文件:
- 火车图像-idx3-ubyte.gz – 包含训练集图像
- 火车标签-idx1-ubyte.gz – 包含训练集标签
- t10k-images-idx3-ubyte.gz – 包含测试集图像
- t10k-标签-idx1-ubyte.gz – 包含测试集标签
我们使用torchvision.datasets
模块用于从本地公共存储桶下载数据,然后将其上传到我们的训练数据存储桶。 我们将此存储桶位置作为输入传递给 SageMaker 训练作业。 我们的训练脚本使用此位置下载并准备训练数据,然后训练模型。 请看下面的代码:
MNIST.mirrors = [ f"https://sagemaker-example-files-prod-{region}.s3.amazonaws.com/datasets/image/MNIST/"
] MNIST( "data", download=True, transform=transforms.Compose( [transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))] ),
)
创建训练脚本
借助 SageMaker,您可以使用自己的模型 脚本模式。 通过脚本模式,您可以使用预构建的 SageMaker 容器并提供您自己的训练脚本,其中包含模型定义以及任何自定义库和依赖项。 这 SageMaker Python 开发工具包 将我们的脚本作为 entry_point
到容器,该容器从提供的脚本加载并运行训练函数来训练我们的模型。
训练完成后,SageMaker 将模型输出保存在我们作为训练作业参数提供的 S3 存储桶中。
我们的训练代码改编自以下内容 PyTorch 示例脚本。 以下代码摘录显示了模型定义和训练函数:
# define network class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(1, 32, 3, 1) self.conv2 = nn.Conv2d(32, 64, 3, 1) self.dropout1 = nn.Dropout(0.25) self.dropout2 = nn.Dropout(0.5) self.fc1 = nn.Linear(9216, 128) self.fc2 = nn.Linear(128, 10) def forward(self, x): x = self.conv1(x) x = F.relu(x) x = self.conv2(x) x = F.relu(x) x = F.max_pool2d(x, 2) x = self.dropout1(x) x = torch.flatten(x, 1) x = self.fc1(x) x = F.relu(x) x = self.dropout2(x) x = self.fc2(x) output = F.log_softmax(x, dim=1) return output
# train def train(args, model, device, train_loader, optimizer, epoch): model.train() for batch_idx, (data, target) in enumerate(train_loader): data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = F.nll_loss(output, target) loss.backward() optimizer.step() if batch_idx % args.log_interval == 0: print('Train Epoch: {} [{}/{} ({:.0f}%)]tLoss: {:.6f}'.format( epoch, batch_idx * len(data), len(train_loader.dataset), 100. * batch_idx / len(train_loader), loss.item())) if args.dry_run: break
训练模型
现在我们已经设置了环境并创建了输入数据集和自定义训练脚本,我们可以使用 SageMaker 开始模型训练。 我们使用 SageMaker Python SDK 中的 PyTorch 估计器在 SageMaker 上启动训练作业。 我们将所需的参数传递给估计器并调用 fit 方法。 当我们在 PyTorch 估计器上调用 fit 时,SageMaker 使用我们的脚本作为训练代码开始训练作业:
from sagemaker.pytorch import PyTorch output_location = f"s3://{bucket}/{prefix}/output"
print(f"training artifacts will be uploaded to: {output_location}") hyperparameters={ "batch-size": 100, "epochs": 1, "lr": 0.1, "gamma": 0.9, "log-interval": 100
} instance_type = "ml.c4.xlarge"
estimator = PyTorch( entry_point="train.py", source_dir="code", # directory of your training script role=execution_role, framework_version="1.13", py_version="py39", instance_type=instance_type, instance_count=1, volume_size=250, output_path=output_location, hyperparameters=hyperparameters
) estimator.fit(inputs = { 'training': f"{inputs}", 'testing': f"{inputs}"
})
将训练后的模型导出为 ONNX 模型
训练完成并将模型保存到 Amazon S3 中的预定义位置后,我们使用 ONNX 运行时将模型导出到 ONNX 模型。
我们在训练脚本中包含将模型导出到 ONNX 的代码,以便在训练完成后运行。
PyTorch 通过使用我们的输入运行模型并记录用于计算输出的运算符跟踪,将模型导出到 ONNX。 我们使用 PyTorch 的正确类型的随机输入 torch.onnx.export
函数将模型导出到 ONNX。 我们还将输入中的第一个维度指定为动态,以便我们的模型接受变量 batch_size
推理期间的输入。
def export_to_onnx(model, model_dir, device): logger.info("Exporting the model to onnx.") dummy_input = torch.randn(1, 1, 28, 28).to(device) input_names = [ "input_0" ] output_names = [ "output_0" ] path = os.path.join(model_dir, 'mnist-pytorch.onnx') torch.onnx.export(model, dummy_input, path, verbose=True, input_names=input_names, output_names=output_names, dynamic_axes={'input_0' : {0 : 'batch_size'}, # variable length axes 'output_0' : {0 : 'batch_size'}})
ONNX 是深度学习模型的开放标准格式,可实现 PyTorch、Microsoft Cognitive Toolkit (CNTK) 等深度学习框架之间的互操作性。 这意味着您可以使用这些框架中的任何一个来训练模型,然后以 ONNX 格式导出预训练的模型。 通过将模型导出到 ONNX,您可以从更广泛的部署设备和平台选择中获益。
下载并提取模型工件
我们的训练脚本保存的 ONNX 模型已由 SageMaker 复制到我们开始训练作业时指定的输出位置中的 Amazon S3。 模型工件存储为压缩存档文件,称为 model.tar.gz
。 我们将此存档文件下载到 Studio 笔记本实例中的本地目录并提取模型工件,即 ONNX 模型。
import tarfile local_model_file = 'model.tar.gz'
model_bucket,model_key = estimator.model_data.split('/',2)[-1].split('/',1)
s3 = boto3.client("s3")
s3.download_file(model_bucket,model_key,local_model_file) model_tar = tarfile.open(local_model_file)
model_file_name = model_tar.next().name
model_tar.extractall('.')
model_tar.close()
验证 ONNX 模型
ONNX 模型导出到名为 mnist-pytorch.onnx
通过我们的训练脚本。 下载并解压该文件后,我们可以选择使用以下命令验证 ONNX 模型 onnx.checker
模块。 的 check_model
该模块中的函数检查模型的一致性。 如果测试失败,则会引发异常。
import onnx onnx_model = onnx.load("mnist-pytorch.onnx")
onnx.checker.check_model(onnx_model)
打包模型和推理代码
在本文中,我们对 Azure Functions 使用 .zip 部署。 在此方法中,我们将模型、随附代码和 Azure Functions 设置打包在 .zip 文件中,并将其发布到 Azure Functions。 以下代码显示了我们的部署包的目录结构:
mnist-onnx
├── function_app.py
├── model
│ └── mnist-pytorch.onnx
└── requirements.txt
列出依赖项
我们在中列出了推理代码的依赖项 requirements.txt
文件位于我们包的根目录下。 当我们发布包时,该文件用于构建Azure Functions环境。
azure-functions
numpy
onnxruntime
编写推理代码
我们使用Python编写以下推理代码,使用ONNX运行时库加载我们的模型并运行推理。 这指示 Azure Functions 应用程序使端点在 /classify
相对路径。
import logging
import azure.functions as func
import numpy as np
import os
import onnxruntime as ort
import json app = func.FunctionApp() def preprocess(input_data_json): # convert the JSON data into the tensor input return np.array(input_data_json['data']).astype('float32') def run_model(model_path, req_body): session = ort.InferenceSession(model_path) input_data = preprocess(req_body) logging.info(f"Input Data shape is {input_data.shape}.") input_name = session.get_inputs()[0].name # get the id of the first input of the model try: result = session.run([], {input_name: input_data}) except (RuntimeError) as e: print("Shape={0} and error={1}".format(input_data.shape, e)) return result[0] def get_model_path(): d=os.path.dirname(os.path.abspath(__file__)) return os.path.join(d , './model/mnist-pytorch.onnx') @app.function_name(name="mnist_classify")
@app.route(route="classify", auth_level=func.AuthLevel.ANONYMOUS)
def main(req: func.HttpRequest) -> func.HttpResponse: logging.info('Python HTTP trigger function processed a request.') # Get the img value from the post. try: req_body = req.get_json() except ValueError: pass if req_body: # run model result = run_model(get_model_path(), req_body) # map output to integer and return result string. digits = np.argmax(result, axis=1) logging.info(type(digits)) return func.HttpResponse(json.dumps({"digits": np.array(digits).tolist()})) else: return func.HttpResponse( "This HTTP triggered function successfully.", status_code=200 )
将模型部署到 Azure Functions
现在我们已将代码打包成所需的 .zip 格式,准备将其发布到 Azure Functions。 我们使用 Azure CLI 来执行此操作,这是一个用于创建和管理 Azure 资源的命令行实用程序。 使用以下代码安装 Azure CLI:
!pip install -q azure-cli
然后完成以下步骤:
- 登录到 Azure:
!az login
- 设置资源创建参数:
import random random_suffix = str(random.randint(10000,99999)) resource_group_name = f"multicloud-{random_suffix}-rg" storage_account_name = f"multicloud{random_suffix}" location = "ukwest" sku_storage = "Standard_LRS" functions_version = "4" python_version = "3.9" function_app = f"multicloud-mnist-{random_suffix}"
- 使用以下命令创建 Azure Functions 应用程序以及必备资源:
!az group create --name {resource_group_name} --location {location} !az storage account create --name {storage_account_name} --resource-group {resource_group_name} --location {location} --sku {sku_storage} !az functionapp create --name {function_app} --resource-group {resource_group_name} --storage-account {storage_account_name} --consumption-plan-location "{location}" --os-type Linux --runtime python --runtime-version {python_version} --functions-version {functions_version}
- 设置 Azure Functions,以便当我们部署 Functions 包时,
requirements.txt
文件用于构建我们的应用程序依赖项:!az functionapp config appsettings set --name {function_app} --resource-group {resource_group_name} --settings @./functionapp/settings.json
- 配置 Functions 应用程序以运行 Python v2 模型并在 .zip 部署后对收到的代码执行构建:
{ "AzureWebJobsFeatureFlags": "EnableWorkerIndexing", "SCM_DO_BUILD_DURING_DEPLOYMENT": true }
- 在我们拥有具有正确配置的资源组、存储容器和 Functions 应用程序后,将代码发布到 Functions 应用程序:
!az functionapp deployment source config-zip -g {resource_group_name} -n {function_app} --src {function_archive} --build-remote true
测试模型
我们已将 ML 模型作为 HTTP 触发器部署到 Azure Functions,这意味着我们可以使用 Functions 应用程序 URL 向函数发送 HTTP 请求,以调用函数并运行模型。
要准备输入,请从 SageMaker 示例文件存储桶下载测试图像文件,并根据模型所需的格式准备一组示例:
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
import matplotlib.pyplot as plt transform=transforms.Compose( [transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]
) test_dataset = datasets.MNIST(root='../data', download=True, train=False, transform=transform)
test_loader = DataLoader(test_dataset, batch_size=16, shuffle=True) test_features, test_labels = next(iter(test_loader))
使用请求库将带有示例输入的发布请求发送到推理端点。 推理端点采用以下代码所示的格式:
import requests, json def to_numpy(tensor): return tensor.detach().cpu().numpy() if tensor.requires_grad else tensor.cpu().numpy() url = f"https://{function_app}.azurewebsites.net/api/classify"
response = requests.post(url, json.dumps({"data":to_numpy(test_features).tolist()}) )
predictions = json.loads(response.text)['digits']
清理
完成模型测试后,删除资源组及其所包含的资源,包括存储容器和 Functions 应用程序:
!az group delete --name {resource_group_name} --yes
此外,建议关闭 SageMaker Studio 中的闲置资源以降低成本。 欲了解更多信息,请参阅 通过自动关闭 Amazon SageMaker Studio 中的空闲资源来节省成本.
结论
在这篇文章中,我们展示了如何使用 SageMaker 构建和训练 ML 模型,并将其部署到另一个云提供商。 在解决方案中,我们使用了 SageMaker Studio 笔记本,但对于生产工作负载,我们建议使用 多播 创建可重复的培训工作流程以加速模型开发和部署。
本文并未展示在多云环境中部署和运行模型的所有可能方法。 例如,您还可以将模型与推理代码和依赖库一起打包到容器映像中,以便在任何平台上将模型作为容器化应用程序运行。 有关此方法的更多信息,请参阅 使用 Amazon CodeCatalyst 在多云环境中部署容器应用程序。 这篇文章的目的是展示组织如何在多云环境中使用 AWS AI/ML 功能。
关于作者
拉贾·维迪亚纳坦 是 AWS 的解决方案架构师,为全球金融服务客户提供支持。 Raja 与客户合作,设计复杂问题的解决方案,对其业务产生长期积极影响。 他是一位实力雄厚的工程专业人士,擅长 IT 战略、企业数据管理和应用程序架构,尤其对分析和机器学习感兴趣。
阿曼迪普·巴吉瓦 是 AWS 的高级解决方案架构师,为金融服务企业提供支持。 他根据行业趋势和组织优先事项确定适当的云转型策略,帮助组织实现业务成果。 Amandeep 提供咨询的部分领域包括云迁移、云战略(包括混合云和多云)、数字化转型、数据和分析以及一般技术。
普雷马·耶尔 是 AWS 企业支持的高级技术客户经理。 她与外部客户合作开展各种项目,帮助他们在使用 AWS 时提高解决方案的价值。
- :具有
- :是
- :不是
- :在哪里
- $UP
- 1
- 10
- 100
- 13
- 25
- 28
- 32
- 7
- 9
- a
- 关于
- 加快
- 接受
- ACCESS
- 账号管理
- 后天
- 优点
- 后
- AI
- AI / ML
- 所有类型
- 允许
- 沿
- 已经
- 还
- 尽管
- Amazon
- 亚马逊SageMaker
- 亚马逊 SageMaker 画布
- 亚马逊SageMaker Studio
- 亚马逊网络服务
- an
- 分析师
- 分析
- 和
- 匿名
- 另一个
- 任何
- 阿帕奇
- 应用
- 应用领域
- 应用领域
- 的途径
- 适当
- 架构
- 档案
- 保健
- 地区
- AS
- 评定
- At
- 自动化
- 自动
- 可使用
- AWS
- 轴
- Azure
- 基于
- BE
- 很
- before
- 开始
- 有利
- 得益
- 更好
- 之间
- 都
- 带来
- 更广泛
- 建立
- 建筑物
- 商业
- 但是
- by
- 呼叫
- 被称为
- 调用
- CAN
- 帆布
- 能力
- 携带
- 案件
- 支票
- 程
- 分类
- 点击
- 云端技术
- 码
- 认知
- 共同
- 公司
- 完成
- 复杂
- 符合
- 全面
- 计算
- 配置
- 包含
- 容器
- 集装箱
- 包含
- 上下文
- 方便
- 兑换
- 转换
- 核心
- 成本
- 可以
- 创建信息图
- 创建
- 创造
- 创建
- 资历
- 习俗
- 合作伙伴
- data
- 数据管理
- 资料准备
- 数据科学
- 数据集
- 深
- 深入学习
- 最深
- 默认
- 定义
- 定义
- 演示
- 依赖
- 依赖
- 部署
- 部署
- 部署
- 部署
- 描述
- 细节
- 详情
- 研发支持
- 设备
- 设备
- 不同
- 数字
- 数字化改造
- 数字
- 尺寸
- 讨论
- do
- 码头工人
- 域
- 完成
- 别
- 向下
- 下载
- ,我们将参加
- 动态
- e
- 其他
- 拥抱
- 使
- 使
- 结束
- 端点
- 工程师
- 工程师
- 企业
- 企业
- 环境
- 时代
- 时代
- 所有的
- 例子
- 除
- 例外
- 执行
- 专门知识
- 出口
- 出口
- 外部
- 提取
- 失败
- 特征
- 少数
- 文件
- 档
- 金融
- 金融服务
- 找到最适合您的地方
- 姓氏:
- 适合
- 以下
- 针对
- 格式
- 基金会
- 骨架
- 框架
- 止
- 功能
- 功能
- 其他咨询
- 产生
- 生成的
- 生成式人工智能
- 得到
- 全球
- 全球金融
- 团队
- 有
- he
- 帮助
- 帮助
- 托管
- 创新中心
- How To
- HTML
- HTTP
- HTTPS
- 杂交种
- ID
- 确定
- 空闲
- if
- 说明
- 图片
- 图片
- 影响力故事
- 进口
- 输入
- 改善
- 改善
- in
- 包括
- 包含
- 独立
- 行业中的应用:
- 信息
- 初始
- 输入
- 输入
- 安装
- 例
- 说明
- 整合
- 集成
- 意图
- 利益
- 接口
- 互操作性
- 成
- IT
- 它的
- 工作
- 工作机会
- JPG
- JSON
- 语言
- 大
- 最新
- 启动
- 学习用品
- 学习
- 长度
- 杠杆作用
- 库
- 自学资料库
- 生命周期
- Line
- Linux的
- 清单
- 加载
- 负载
- 本地
- 当地
- 圖書分館的位置
- 记录
- 长期
- 寻找
- 离
- 机
- 机器学习
- 使
- 管理
- 管理
- 颠覆性技术
- 经理
- 许多
- 地图
- matplotlib
- 可能..
- 手段
- 满足
- 会见
- 方法
- 方法
- 微软
- 可能
- 移民
- ML
- 多播
- 时尚
- 模型
- 模型
- 模块
- 更多
- 最先进的
- 姓名
- 命名
- 亦即
- 需求
- 打印车票
- 需要
- 净
- 网络
- 神经
- 神经网络
- 笔记本
- 麻木
- 对象
- of
- on
- 一
- 打开
- 开放源码
- 操作
- 运营
- 运营商
- 附加选项
- or
- 秩序
- 组织
- 组织
- 组织
- OS
- 其他名称
- 我们的
- 输出
- 结果
- 产量
- 学校以外
- 己
- 包
- συσκευάζονται
- 参数
- 参数
- 部分
- 特别
- 党
- 通过
- 通行证
- 径
- 演出
- 权限
- 平台
- 平台
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 热门
- 积极
- 可能
- 帖子
- 预测
- 准备
- Prepare
- 先决条件
- 小学
- 校长
- 问题
- 处理
- 生产
- 生产率
- 核心产品
- 所以专业
- 项目
- 提供
- 提供
- 提供者
- 提供
- 国家
- 发布
- 蟒蛇
- pytorch
- 快速
- 凸
- 随机
- 准备
- 接收
- 建议
- 了解
- 减少
- 参考
- 而不管
- 地区
- 注册处
- 相对的
- 可重复的
- 请求
- 要求
- 要求
- 必须
- 岗位要求
- 资源
- 资源
- 响应
- 导致
- 导致
- 回报
- 右
- 角色
- 根
- 运行
- 运行
- 运行
- sagemaker
- 同
- 保存
- 鳞片
- 扫描
- 情景
- 科学
- 科学家
- 脚本
- SDK
- 次
- 部分
- 部分
- 保安
- 看到
- 选择
- 自
- 提交
- 前辈
- 服务
- 特色服务
- 会议
- 集
- 设置
- 格局
- 形状
- 她
- 应该
- 显示
- 显示
- 如图
- 作品
- 关闭
- 关闭
- 简易
- 情况
- 技能的
- 技能
- So
- 软件
- 方案,
- 解决方案
- 一些
- 来源
- 主权
- 指定
- 阶段
- 标准
- 开始
- 开始
- 启动
- 步骤
- 存储
- 商店
- 存储
- 策略
- 串
- 强烈
- 结构体
- 工作室
- 后来
- 顺利
- 这样
- SUPPORT
- 支持
- 支持
- 采取
- 需要
- 目标
- 团队
- 文案
- 技术
- 专业技术
- 十
- tensorflow
- test
- 测试
- 测试
- 文本
- 这
- 其
- 他们
- 他们自己
- 然后
- 博曼
- 他们
- 事
- 第三
- Free Introduction
- 时
- 至
- 工具箱
- 工具
- 火炬
- 火炬视
- 追踪
- 培训
- 熟练
- 产品培训
- 改造
- 转型
- 转型策略
- 变换
- 趋势
- 触发
- 引发
- true
- 尝试
- 类型
- 独特
- 上传
- 上传
- 网址
- 使用
- 用例
- 用过的
- 用户
- 使用
- 运用
- 效用
- 验证
- 折扣值
- 变量
- 各种
- 厂商
- 版本
- 漏洞
- 想
- 是
- 方法
- we
- 卷筒纸
- Web服务
- 基于网络的
- 井
- ,尤其是
- 这
- 将
- 中
- 工作流程
- 合作
- 写
- 书面
- X
- 但
- 完全
- 您一站式解决方案
- 和风网
- 压缩