模型部署专题 | 02 :BERT-Tensorflow模型部署(CPU版和GPU版)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 介绍如何用Tensorflow部署BERT模型,包括CPU版和GPU版

背景

使用BERT-TensorFlow解决法研杯要素识别任务,该任务其实是一个多标签文本分类任务。模型的具体不是本文重点,故于此不细细展开说明。本文重点阐述如何部署模型。

模型部署

官方推荐TensorFlow模型在生产环境中提供服务时使用SavedModel格式。SavedModel格式是一种通用的、语言中立的、密闭的、可恢复的TensorFlow模型序列化格式。SavedModel封装了TensorFlow Saver,对于模型服务是一种标准的导出方法。

导出SaveModel格式

这里的estimator部分也忽略,不详细说明,其关键是调用estimator的export_savedmodel导出SaveModel格式的模型,注意serving_input_fn的编写。其中的字段与后续POST中的数据字段相对应。

def serving_input_fn():
    # 保存模型为SaveModel格式
    # 采用最原始的feature方式,输入是feature Tensors。
    # 如果采用build_parsing_serving_input_receiver_fn,则输入是tf.Examples
    label_ids = tf.placeholder(tf.int32, [None, 20], name='label_ids')  # 要素识别任务有20个类别
    input_ids = tf.placeholder(tf.int32, [None, cfig.max_seq_length], name='input_ids')
    input_mask = tf.placeholder(tf.int32, [None, cfig.max_seq_length], name='input_mask')
    segment_ids = tf.placeholder(tf.int32, [None, cfig.max_seq_length], name='segment_ids')
    input_fn = tf.estimator.export.build_raw_serving_input_receiver_fn({
        'label_ids': label_ids,
        'input_ids': input_ids,
        'input_mask': input_mask,
        'segment_ids': segment_ids,
    })()
    return input_fn

if cfig.do_export:
    estimator._export_to_tpu = False
    estimator.export_savedmodel(cfig.export_dir, serving_input_fn)

生成的SaveModel:

image.png

检查模型:

saved_model_cli show --dir  save_model/1 --all

结果如下图所示:

image.png

部署服务

先基于Docker拉取tensorflow/serving镜像(PS:这是CPU版)。再基于镜像,启动容器:

docker run --rm -t -p 8501:8501 -v /home/liujiepeng/MachineComprehension/CAIL2019/ElementsRecognition/bert_tensorflow_multi_label/save_model:/models/cail_elem  --name=tfserving_cail  -e MODEL_NAME=cail_elem tensorflow/serving:latest

运行结果:

2019-09-21 03:24:48.782137: I tensorflow_serving/model_servers/server.cc:82] Building single TensorFlow model file config:  model_name: cail_elem model_base_path: /models/cail_elem
2019-09-21 03:24:48.782580: I tensorflow_serving/model_servers/server_core.cc:462] Adding/updating models.
2019-09-21 03:24:48.782633: I tensorflow_serving/model_servers/server_core.cc:561]  (Re-)adding model: cail_elem
2019-09-21 03:24:48.883257: I tensorflow_serving/core/basic_manager.cc:739] Successfully reserved resources to load servable {name: cail_elem version: 1}
2019-09-21 03:24:48.883351: I tensorflow_serving/core/loader_harness.cc:66] Approving load for servable version {name: cail_elem version: 1}
2019-09-21 03:24:48.883433: I tensorflow_serving/core/loader_harness.cc:74] Loading servable version {name: cail_elem version: 1}
2019-09-21 03:24:48.883530: I external/org_tensorflow/tensorflow/contrib/session_bundle/bundle_shim.cc:363] Attempting to load native SavedModelBundle in bundle-shim from: /models/cail_elem/1
2019-09-21 03:24:48.883581: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:31] Reading SavedModel from: /models/cail_elem/1
2019-09-21 03:24:48.917199: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:54] Reading meta graph with tags { serve }
2019-09-21 03:24:48.948563: I external/org_tensorflow/tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 AVX512F FMA
2019-09-21 03:24:49.028645: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:202] Restoring SavedModel bundle.
2019-09-21 03:24:49.497106: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:151] Running initialization op on SavedModel bundle at path: /models/cail_elem/1
2019-09-21 03:24:49.543113: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:311] SavedModel load for tags { serve }; Status: success. Took 659522 microseconds.
2019-09-21 03:24:49.543191: I tensorflow_serving/servables/tensorflow/saved_model_warmup.cc:103] No warmup data file found at /models/cail_elem/1/assets.extra/tf_serving_warmup_requests
2019-09-21 03:24:49.543323: I tensorflow_serving/core/loader_harness.cc:86] Successfully loaded servable version {name: cail_elem version: 1}
2019-09-21 03:24:49.549907: I tensorflow_serving/model_servers/server.cc:324] Running gRPC ModelServer at 0.0.0.0:8500 ...
[warn] getaddrinfo: address family for nodename not supported
[evhttp_server.cc : 239] RAW: Entering the event loop ...
2019-09-21 03:24:49.557068: I tensorflow_serving/model_servers/server.cc:344] Exporting HTTP/REST API at:localhost:8501 ...

查看正在运行的容器:docker container ls

image.png

请求服务

对原始请求进行封装,构建符合要求的POST请求:

# -*- coding: utf-8 -*-
# @CreatTime    : 2019/9/20 11:46
# @Author  : JasonLiu
# @FileName: test_tfserving.py
import requests
import json
import tensorflow as tf
import collections
import pdb
import numpy as np
from bert import tokenization
from utils import create_examples_text_list, convert_single_example


def test_request():
    label_ids = 20*[0]
    input_ids = 512*[1]
    input_mask = 512*[1]
    segment_ids = 512*[1]
    data_dict_temp = {
            'label_ids': label_ids,
            'input_ids': input_ids,
            'input_mask': input_mask,
            'segment_ids': segment_ids,
    }
    data_list = []
    data_list.append(data_dict_temp)

    data = json.dumps({"signature_name": "serving_default", "instances": data_list})
    headers = {"content-type": "application/json"}
    json_response = requests.post('http://localhost:8501/v1/models/cail_elem:predict', data=data, headers=headers)
    print(json_response.text)
    predictions = json.loads(json_response.text)['predictions']
    print(predictions)


def request_from_raw_text():
    """

    :return:
    """
    BERT_VOCAB = "/home/data1/ftpdata/pretrain_models/bert_tensoflow_version/bert-base-chinese-vocab.txt"
    text_list = ["权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
                 "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
                 "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
                 "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
                 "锦州市凌河区公证处相关公证人员对此过程进行了公证。"
                 ]
    data_list = []
    tokenizer = tokenization.FullTokenizer(vocab_file=BERT_VOCAB, do_lower_case=True)
    predict_examples = create_examples_text_list(text_list)
    for (ex_index, example) in enumerate(predict_examples):
        feature = convert_single_example(ex_index, example,
                                         512, tokenizer)

        def create_int_feature(values):
            f = tf.train.Feature(int64_list=tf.train.Int64List(value=list(values)))
            return f

        features = {}
        features["input_ids"] = feature.input_ids
        features["input_mask"] = feature.input_mask
        # pdb.set_trace()
        features["segment_ids"] = feature.segment_ids
        if isinstance(feature.label_ids, list):
            label_ids = feature.label_ids
        else:
            label_ids = feature.label_ids[0]
        features["label_ids"] = label_ids
        # tf_example = tf.train.Example(features=tf.train.Features(feature=features))
        data_list.append(features)


    data = json.dumps({"signature_name": "serving_default", "instances": data_list})
    headers = {"content-type": "application/json"}
    json_response = requests.post('http://localhost:8501/v1/models/cail_elem:predict', data=data, headers=headers)
    # print(json_response.text)
    # pdb.set_trace()
    predictions = json.loads(json_response.text)['predictions']
    # print(predictions)
    for p in range(len(predictions)):
        p_list = predictions[p]
        label_index = np.argmax(p_list)
        print("content={},label={}".format(text_list[p], label_index+1))
    print("total number=", len(text_list))


request_from_raw_text()

从运行效率来看,CPU推理上,整体偏慢。运行上述32条任务,耗时:

real    0m17.366s
user    0m1.815s
sys     0m0.997s

那么我们试试采用tensorflow/serving:latest:gpu版。此时,我们需要特别注意的是,本地NVIDIA 显卡驱动和ensorflow/serving:gpu版本的匹配问题。
由于机器cuda版本是9.0,而tensorflow/serving:latest-gpu是对应cuda 10版本。所以,需要从https://hub.docker.com/r/tensorflow/serving/tags/找到合适的gpu版本。最终发现tensorflow/serving:1.12.3-gpu是可以与机器适配的。所以,拉取该镜像:docker pull tensorflow/serving:1.12.3-gpu
运行容器:

nvidia-docker run  -t --rm -p 8501:8501 -v /home/liujiepeng/MachineComprehension/CAIL2019/ElementsRecognition/bert_tensorflow_multi_label/save_model:/models/cail_elem  -e MODEL_NAME=cail_elem tensorflow/serving:1.12.3-gpu

即可GPU方式启动服务。
再测试,发现运行32条任务的耗时如下:

real    0m5.574s
user    0m2.084s
sys     0m0.902s

提速明显。

相关完整代码已经上传到:

https://github.com/MrRace/TextClassification/tree/master/ElementsRecognition/bert_tensorflow_multi_label

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
1月前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
2月前
|
监控 异构计算
Jetson 学习笔记(八):htop查看CPU占用情况和jtop监控CPU和GPU
在NVIDIA Jetson平台上使用htop和jtop工具来监控CPU、GPU和内存的使用情况,并提供了安装和使用这些工具的具体命令。
173 0
|
29天前
|
并行计算 Linux PyTorch
在云上部署ChatGLM2-6B大模型(GPU版)
本教程指导您在配置了Alibaba Cloud Linux 3的GPU云服务器上,安装大模型运行环境(如Anaconda、Pytorch等),并部署大语言模型,最后通过Streamlit运行大模型对话网页Demo。教程包括创建资源、登录ECS实例、安装及校验CUDA、NVIDIA驱动和cuDNN等步骤。
|
2月前
|
机器学习/深度学习 人工智能 并行计算
CPU和GPU的区别
【10月更文挑战第14天】
|
2月前
|
机器学习/深度学习 人工智能 缓存
GPU加速和CPU有什么不同
【10月更文挑战第20天】GPU加速和CPU有什么不同
65 1
|
3月前
|
算法 测试技术 AI芯片
CPU反超NPU,llama.cpp生成速度翻5倍!LLM端侧部署新范式T-MAC开源
【9月更文挑战第7天】微软研究院提出了一种名为T-MAC的创新方法,旨在解决大型语言模型在资源受限的边缘设备上高效部署的问题。T-MAC通过查表法在CPU上实现低比特LLM的高效推理,支持混合精度矩阵乘法,无需解量化。其通过位级查表实现统一且可扩展的解决方案,优化数据布局和重用率,显著提升了单线程和多线程下的mpGEMV及mpGEMM性能,并在端到端推理吞吐量和能效方面表现出色。然而,表量化和快速聚合技术可能引入近似和数值误差,影响模型准确性。论文详见:[链接](https://www.arxiv.org/pdf/2407.00088)。
186 10
|
3月前
|
人工智能 自然语言处理 文字识别
MinerU-大语言语料处理神器,CPU/GPU均可跑,开源免费“敲”好用
在7月4日举行的WAIC 2024科学前沿主论坛上,书生·浦语2.5正式发布,面向大模型研发与应用的全链条工具体系同时迎来升级。
MinerU-大语言语料处理神器,CPU/GPU均可跑,开源免费“敲”好用
|
4月前
|
机器学习/深度学习 编解码 人工智能
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
随着人工智能、大数据和深度学习等领域的快速发展,GPU服务器的需求日益增长。阿里云的GPU服务器凭借强大的计算能力和灵活的资源配置,成为众多用户的首选。很多用户比较关心gpu云服务器的收费标准与活动价格情况,目前计算型gn6v实例云服务器一周价格为2138.27元/1周起,月付价格为3830.00元/1个月起;计算型gn7i实例云服务器一周价格为1793.30元/1周起,月付价格为3213.99元/1个月起;计算型 gn6i实例云服务器一周价格为942.11元/1周起,月付价格为1694.00元/1个月起。本文为大家整理汇总了gpu云服务器的最新收费标准与活动价格情况,以供参考。
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
|
24天前
|
弹性计算 固态存储 Linux
阿里云服务器、轻量应用服务器、gpu云服务器收费标准与实时活动价格参考
云服务器ECS、轻量应用服务器和gpu云服务器是阿里云的主要云服务器产品,目前轻量应用服务器2核2G收费标准为60元/月,活动价格只要36元/1年或68元1年,云服务器1核1G包月收费标准最低为24.0元/月,GPU云服务器中gn6i实例4核15G配置月付1681.00/1个月起,gn6v实例8核32G配置月付3817.00/1个月起。本文为大家整理汇总了阿里云服务器、轻量应用服务器、gpu云服务器的最新收费标准与活动价格情况,以表格形式展示给大家,以供参考。
|
29天前
|
人工智能 弹性计算 编解码
阿里云GPU云服务器性能、应用场景及收费标准和活动价格参考
GPU云服务器作为阿里云提供的一种高性能计算服务,通过结合GPU与CPU的计算能力,为用户在人工智能、高性能计算等领域提供了强大的支持。其具备覆盖范围广、超强计算能力、网络性能出色等优势,且计费方式灵活多样,能够满足不同用户的需求。目前用户购买阿里云gpu云服务器gn5 规格族(P100-16G)、gn6i 规格族(T4-16G)、gn6v 规格族(V100-16G)有优惠,本文为大家详细介绍阿里云gpu云服务器的相关性能及收费标准与最新活动价格情况,以供参考和选择。