日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

模型倉庫(FastNN)

重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。

PAI模型倉庫FastNN(Fast Neural Networks)是一個基于PAISoar的分布式神經網絡倉庫。目前FastNN已經支持了Inception、Resnet、VGG等經典算法,后續會逐步開放更多的先進模型。目前FastNN已經內置于Designer平臺中,并且可以直接在該平臺中使用。

警告

公共云GPU服務器即將過保下線,您可以繼續提交CPU版本的TensorFlow任務。如需使用GPU進行模型訓練,請前往DLC提交任務,具體操作請參見創建訓練任務

準備數據源

為了方便在PAI控制臺上試用FastNN,cifar10、mnist、flowers數據已下載并轉換為tfrecord后存儲在公開OSS上,可通過PAI的讀數據表OSS數據同步組件訪問。存儲OSS的路徑如下。

數據集

分類數

訓練集

測試集

存儲路徑

mnist

10

3320

350

  • 北京:oss://pai-online-beijing.oss-cn-beijing-internal.aliyuncs.com/fastnn-data/mnist/

  • 上海:oss://pai-online.oss-cn-shanghai-internal.aliyuncs.com/fastnn-data/mnist/

cifar10

10

50000

10000

  • 北京:oss://pai-online-beijing.oss-cn-beijing-internal.aliyuncs.com/fastnn-data/cifar10/

  • 上海:oss://pai-online.oss-cn-shanghai-internal.aliyuncs.com/fastnn-data/cifar10/

flowers

5

60000

10000

  • 北京:oss://pai-online-beijing.oss-cn-beijing-internal.aliyuncs.com/fastnn-data/flowers/

  • 上海:oss://pai-online.oss-cn-shanghai-internal.aliyuncs.com/fastnn-data/flowers/

FastNN庫已支持讀取tfrecord格式的數據,并基于TFRecordDataset接口實現dataset pipeline以供模型訓練試用,幾乎可掩蓋數據預處理時間。另外,由于目前FastNN庫在數據分片方面不夠精細,建議您在準備數據時,盡量保證數據能平均分配到每臺機器,即:

  • 每個tfrecord文件的樣本數量基本一致。

  • 每個worker處理的tfrecord文件數量基本一致。

如果數據格式同為tfrecord,可參考datasets目錄下的cifar10、mnist和flowers等各文件實現dataset pipeline。以cifar10數據為例,實現方法如下。

假設cifar10數據的key_to_features格式為如下。

features={
        'image/encoded': tf.FixedLenFeature((), tf.string, default_value=''),
        'image/format': tf.FixedLenFeature((), tf.string, default_value='png'),
        'image/class/label': tf.FixedLenFeature(
          [], tf.int64, default_value=tf.zeros([], dtype=tf.int64)),
}
  1. 在datasets目錄下創建數據解析文件cifar10.py,并編輯內容。

    """Provides data for the Cifar10 dataset.
    The dataset scripts used to create the dataset can be found at:
    datasets/download_and_covert_data/download_and_convert_cifar10.py
    """
    from __future__ import division
    from __future__ import print_function
    import tensorflow as tf
    """Expect func_name is ‘parse_fn’
    """
    def parse_fn(example):
      with tf.device("/cpu:0"):
        features = tf.parse_single_example(
          example,
          features={
            'image/encoded': tf.FixedLenFeature((), tf.string, default_value=''),
            'image/format': tf.FixedLenFeature((), tf.string, default_value='png'),
            'image/class/label': tf.FixedLenFeature(
              [], tf.int64, default_value=tf.zeros([], dtype=tf.int64)),
          }
        )
        image = tf.image.decode_jpeg(features['image/encoded'], channels=3)
        label = features['image/class/label']
        return image, label
  2. datasets/dataset_factory.py中補足dataset_map。

    from datasets import cifar10
    datasets_map = {
        'cifar10': cifar10,
    }
  3. 執行任務腳本時,指定參數dataset_name=cifar10和train_files=cifar10_train.tfrecord,即可使用cifar10數據進行模型訓練。

說明

如果您需要讀取其他的格式數據,需自行實現dataset pipeline構建邏輯(參考utils/dataset_utils.py)。

超參文件說明

PAI-FastNN支持以下類型的超參:

  • 數據集參數:確定訓練集的基本屬性的參數,例如訓練集存儲路徑dataset_dir。

  • 數據預處理參數:數據預處理函數及dataset pipeline相關參數。

  • 模型參數:模型訓練基本參數,包括model_name、batch_size等。

  • 學習率參數:學習率及其相關調優參數。

  • 優化器參數:優化器及其相關參數。

  • 日志參數:關于輸出日志的參數。

  • 性能調優參數:混合精度等其他調優參數。

超參文件的格式如下。

enable_paisora=True
batch_size=128
use_fp16=True
dataset_name=flowers
dataset_dir=oss://pai-online-beijing.oss-cn-beijing-internal.aliyuncs.com/fastnn-data/flowers/
model_name=inception_resnet_v2
optimizer=sgd
num_classes=5
job_name=worker
  • 數據集參數

    名稱

    類型

    描述

    dataset_name

    string

    指定輸入數據解析文件的名稱。取值包括:mockcifar10mnistflowers,取值說明請參見images/datasets目錄下所有的數據解析文件。默認使用模擬數據mock

    dataset_dir

    string

    指定輸入數據集的絕對路徑,默認為None。

    num_sample_per_epoch

    integer

    指定數據集總樣本數,一般用來配合學習率的衰減。

    num_classes

    integer

    指定樣本分類數,默認為100。

    train_files

    string

    指定所有訓練數據的文件名,文件間分隔符為逗號,例如0.tfrecord,1.tfrecord

  • 數據預處理參數

    名稱

    類型

    描述

    preprocessing_name

    string

    model_name共同指定數據預處理的方法名,取值范圍請參見images/preprocessing目錄下的preprocessing_factory文件。默認設置為None,表示不進行數據預處理。

    shuffle_buffer_size

    integer

    在生成數據流水線時,以樣本為粒度進行shuffle的緩存池大小,默認為1024。

    num_parallel_batches

    integer

    batch_size乘積為map_and_batch的并行線程數,協助指定解析樣本的并行粒度,默認為8。

    prefetch_buffer_size

    integer

    指定數據流水線預取數據的批數,默認為32。

    num_preprocessing_threads

    integer

    指定數據流水線進行并行數據預取的線程數,默認為16。

    datasets_use_caching

    bool

    是否打開以內存為開銷,進行輸入數據的壓縮緩存。默認為False,表示不打開。

  • 模型參數

    名稱

    類型

    描述

    task_type

    string

    任務類型,取值包括:

    • pretrain:模型預訓練,默認。

    • finetune:模型調優

    model_name

    string

    指定進行訓練的模型,取值包括images/models下的所有模型。您可以參考images/models/model_factory文件中所有定義的模型設置model_name,默認為inception_resnet_v2

    num_epochs

    integer

    訓練集訓練輪數,默認為100。

    weight_decay

    float

    模型訓練時權重的衰減系數,默認為0.00004。

    max_gradient_norm

    float

    是否根據全局歸一化值進行梯度裁剪。默認為None,表示不進行梯度裁剪。

    batch_size

    integer

    單卡一次迭代處理的數據量,默認為32。

    model_dir

    string

    重載checkpoint的路徑。默認為None,表示不進行模型調優。

    ckpt_file_name

    string

    重載checkpoint的文件名,默認為None。

  • 學習率參數

    名稱

    類型

    描述

    warmup_steps

    integer

    逆衰減學習率的迭代數,默認為0。

    warmup_scheme

    string

    學習率逆衰減的方式。取值為t2t(Tensor2Tensor),表示初始化為指定學習率的1/100,然后exponentiate逆衰減到指定學習率為止。

    decay_scheme

    string

    學習率衰減的方式。可選值:

    • luong234:在2/3的總迭代數之后,開始4次衰減,衰減系數為1/2。

    • luong5:在1/2的總迭代數之后,開始5次衰減,衰減系數為1/2。

    • luong10:在1/2的總迭代數之后,開始10次衰減,衰減系數為1/2。

    learning_rate_decay_factor

    float

    指定學習率衰減系數,默認為0.94。

    learning_rate_decay_type

    string

    指定學習率衰減類型,可選值:fixedexponential(默認)和polynomial

    learning_rate

    float

    指定學習率初始值,默認為0.01。

    end_learning_rate

    float

    指定衰減時學習率值的下限,默認為0.0001。

  • 優化器參數

    名稱

    類型

    描述

    optimizer

    string

    指定優化器名稱。可選值:adadeltaadagradadamftrlmomentumsgdrmspropadamweightdecay, 默認為rmsprop

    adadelta_rho

    float

    adadelta的衰減系數,默認為0.95。

    adagrad_initial_accumulator_value

    float

    AdaGrad積累器的起始值,默認為0.1。是AdaGrad優化器專用參數。

    adam_beta1

    float

    一次動量預測的指數衰減率,默認為0.9。是Adam優化器專用參數。

    adam_beta2

    float

    二次動量預測的指數衰減率,默認為0.999。是Adam優化器專用參數。

    opt_epsilon

    float

    優化器偏置值,默認為1.0。是Adam優化器專用參數。

    ftrl_learning_rate_power

    float

    學習率參數的冪參數,默認為-0.5。是Ftrl優化器專用參數。

    ftrl_initial_accumulator_value

    float

    FTRL積累器的起始,默認為0.1,是Ftrl優化器專用參數。

    ftrl_l1

    float

    FTRL l1正則項,默認為0.0,是Ftrl優化器專用參數。

    ftrl_l2

    float

    FTRL l2正則項,默認為0.0,是Ftrl優化器專用參數。

    momentum

    float

    MomentumOptimizer的動量參數,默認為0.9,是Momentum優化器專用參數。

    rmsprop_momentum

    float

    RMSPropOptimizer的動量參數,默認為0.9。

    rmsprop_decay

    float

    RMSProp的衰減系數,默認為0.9。

  • 日志參數

    名稱

    類型

    描述

    stop_at_step

    integer

    訓練總迭代數,默認為100。

    log_loss_every_n_iters

    integer

    打印loss信息的迭代頻率,默認為10。

    profile_every_n_iters

    integer

    打印timeline的迭代頻率,默認為0。

    profile_at_task

    integer

    輸出timeline的機器對應索引,默認為0,對應chief worker。

    log_device_placement

    bool

    是否輸出device placement信息,默認為False。

    print_model_statistics

    bool

    是否輸出可訓練變量信息,默認為false。

    hooks

    string

    訓練hooks,默認為StopAtStepHook,ProfilerHook,LoggingTensorHook,CheckpointSaverHook

  • 性能調優參數

    名稱

    類型

    描述

    use_fp16

    bool

    是否進行半精度訓練,默認為True。

    loss_scale

    float

    訓練中loss值scale的系數,默認為1.0。

    enable_paisoar

    bool

    是否使用paisoar框架,默認True。

    protocol

    string

    默認grpc.rdma集群可以使用grpc+verbs,提升數據存取效率。

開發主文件

如果已有模型無法滿足您的需求,您可以通過繼承dataset、models和preprocessing接口進一步開發。在此之前需要了解FastNN庫的基本流程(以images為例,代碼入口文件為train_image_classifiers.py),整體代碼架構流程如下。

# 根據model_name初始化models中對應模型得到network_fn,并可能返回輸入參數train_image_size。
    network_fn = nets_factory.get_network_fn(
            FLAGS.model_name,
            num_classes=FLAGS.num_classes,
            weight_decay=FLAGS.weight_decay,
            is_training=(FLAGS.task_type in ['pretrain', 'finetune']))
# 根據model_name或preprocessing_name初始化相應數據預處理函數得到preprocess_fn。
    preprocessing_fn = preprocessing_factory.get_preprocessing(
                FLAGS.model_name or FLAGS.preprocessing_name,
                is_training=(FLAGS.task_type in ['pretrain', 'finetune']))
# 根據dataset_name,選擇正確的tfrecord格式,同步調用preprocess_fn解析數據集得到數據dataset_iterator。
    dataset_iterator = dataset_factory.get_dataset_iterator(FLAGS.dataset_name,
                                                            train_image_size,
                                                            preprocessing_fn,
                                                            data_sources,
# 調用network_fn、dataset_iterator,定義計算loss的函數loss_fn。
    def loss_fn():
      with tf.device('/cpu:0'):
          images, labels = dataset_iterator.get_next()
        logits, end_points = network_fn(images)
        loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=tf.cast(logits, tf.float32), weights=1.0)
        if 'AuxLogits' in end_points:
          loss += tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=tf.cast(end_points['AuxLogits'], tf.float32), weights=0.4)
        return loss
# 調用PAI-Soar API封裝loss_fn、tf原生optimizer。
    opt = paisoar.ReplicatedVarsOptimizer(optimizer, clip_norm=FLAGS.max_gradient_norm)
    loss = optimizer.compute_loss(loss_fn, loss_scale=FLAGS.loss_scale)
# 根據opt和loss形式化定義training tensor。
    train_op = opt.minimize(loss, global_step=global_step)