深度学习摘要1

gcloud创建GPU的环境

择操作系统映像:

  • 如果您要将 GPU 用于机器学习,则可以为虚拟机使用 Deep Learning VM Image 映像。Deep Learning VM Image 映像预先安装了 GPU 驱动程序,并包含 TensorFlow 和 PyTorch 等软件包。您还可以将 Deep Learning VM Image 用于常规 GPU 工作负载。如需了解可用映像以及这些映像中安装的软件包,请参阅选择映像

image-20220408194657884

T4的价格最便宜,同时需要在新加坡的位置上,开启竞价VM。但是!!! 免费层级不适用于GPU!!!

挂机宝

挂机宝主要用途挂机功能,主要是挂游戏,挂网页,挂QQ机器人,挂旺旺,挂QQ等软件或者其他挂机功能!以前挂机宝一个月10元或者15元价格还是相对有优势的。但是现在云服务器一般也就99块钱一年。价格优势逐渐降低。

可用学生优惠和新用户优惠,这样可以持续好几年。==》所以6元一月也是不便宜了?

TPU 节点

TPU 节点是原始的 TPU 体验。它们需要一个额外的用户虚拟机,该虚拟机通过 gRPC 与 TPU 主机进行通信;不能直接访问 TPU 主机。

TPU 虚拟机

使用 TPU 虚拟机时,您可以通过 SSH 直接连接到与 TPU 设备建立物理连接的 Google Compute Engine 虚拟机。您可以获得虚拟机的根访问权限,以便运行任意代码。您可以访问编译器和运行时调试日志及错误消息。

如果你不希望繁杂的配置,希望迅速获得一个开箱即用的在线交互式 Python 环境,可以使用 GCP 的 AI Platform 中的 Notebook。其预安装了 JupyterLab,可以理解为 Colab 的付费升级版,具备更多功能且限制较少。

进入 https://console.cloud.google.com/mlengine/notebooks ,点击 “新建实例 - TensorFlow 2.0-With 1 NVIDIA Tesla K80”,界面如下:

有cloudshell editor

设置失败的内容

设置地域

gcloud config set project cloud-function-344710
gcloud config set compute/zone     asia-east1-c

gsutil mb -p cloud-function-344710 \
    -c standard \
    gs://tpubucket6577
//查看版本
ctpu tf-versions --project=cloud-function-344710 \
    -zone asia-east1-c 
// 有 2.8.0 和         tpu-vm-tf-2.8.0-pod 主要的两种

ctpu up --tf-version=2.8.0 \
    -zone asia-east1-c \
    --project=cloud-function-344710
    
ctpu up --tf-version=tpu-vm-tf-2.8.0-pod \
    -zone asia-east1-c \
    --project=cloud-function-344710
python3 mnist_main.py \
    --tpu=boost-j9dgt \
    --model_dir=$MODEL_DIR \
    --data_dir=$DATA_DIR \
    --train_epochs=10 \
    --distribution_strategy=tpu \
    --download
export STORAGE_BUCKET=/home/qq420326084/bucket
export MODEL_DIR=${STORAGE_BUCKET}/mnist
export DATA_DIR=${STORAGE_BUCKET}/data

export \
    PYTHONPATH="$PYTHONPATH:/usr/share/models"

image-20220409114750055

报错

AttributeError: Tensor.graph is meaningless when eager execution is enabled.

总结

这里的教程代码好像是1.x版本的,但是在使用时候使用了2.x的TPU,所以出现版本不对的问题。

  • 单设备 TPU 类型价格,适用于按需提供或作为抢占式设备提供的单个 TPU 设备。 您无法组合多个单设备 TPU 类型以协同处理单个工作负载。
  • TPU Pod 类型价格,适用于通过专用高速网络相互连接的 TPU 设备集群。只有在您具有评估配额或者购买 1 年期或 3 年期承诺时,才能使用这些 TPU 类型。

测试tpu的训练代码

https://cloud.google.com/tpu/docs/tutorials/mnist-2.x?hl=zh-cn#tpu-vm

image-20220409102138578

export PROJECT_ID=cloud-function-344710
gcloud config set project ${PROJECT_ID}

gcloud alpha compute tpus tpu-vm create mnist-tutorial \
--zone=asia-east1-c  \
--accelerator-type=v2-8 \
--version=tpu-vm-tf-2.8.0

//连接项
gcloud alpha compute tpus tpu-vm ssh mnist-tutorial --zone=asia-east1-c
//配置环境
export TPU_NAME=local
pip3 install -r /usr/share/tpu/models/official/requirements.txt
//设置环境变量
export STORAGE_BUCKET=/home/qq420326084/bucket
export MODEL_DIR=${STORAGE_BUCKET}/mnist
export DATA_DIR=${STORAGE_BUCKET}/data
export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"
cd /usr/share/tpu/models/official/vision/image_classification
//看代码
python3 mnist_main.py \
  --tpu=${TPU_NAME} \
  --model_dir=${MODEL_DIR} \
  --data_dir=${DATA_DIR} \
  --train_epochs=10 \
  --distribution_strategy=tpu \
  --download
//完成,撒花~~~
Dataset mnist is hosted on GCS. It will automatically be downloaded to your
local data directory. If you'd instead prefer to read directly from our public
GCS bucket (recommended if you're running on GCP), you can instead pass
`try_gcs=True` to `tfds.load` or set `data_dir=gs://tfds-data/datasets`.
{'accuracy_top_1': 0.9763454794883728, 'eval_loss': 0.0818074643611908, 'loss': 0.1114351823925972, 'training_accuracy_top_1': 0.9665948152542114}

在基础上使用BERT-2.x

https://cloud.google.com/tpu/docs/tutorials/bert-2.x?hl=zh-cn

export BERT_BASE_DIR=gs://cloud-tpu-checkpoints/bert/keras_bert/uncased_L-24_H-1024_A-16
(vm)$ export MODEL_DIR=${STORAGE_BUCKET}/bert-output
(vm)$ export GLUE_DIR=gs://cloud-tpu-checkpoints/bert/classification
(vm)$ export TASK=mnli
// cd 位置
cd /usr/share/tpu/models/official/nlp/bert
python3 run_classifier.py \
  --mode='train_and_eval' \
  --input_meta_data_path=${GLUE_DIR}/${TASK}_meta_data \
  --train_data_path=${GLUE_DIR}/${TASK}_train.tf_record \
  --eval_data_path=${GLUE_DIR}/${TASK}_eval.tf_record \
  --bert_config_file=${BERT_BASE_DIR}/bert_config.json \
  --init_checkpoint=${BERT_BASE_DIR}/bert_model.ckpt \
  --train_batch_size=32 \
  --eval_batch_size=32 \
  --learning_rate=2e-5 \
  --num_train_epochs=1 \
  --model_dir=${MODEL_DIR} \
  --distribution_strategy=tpu \
  --tpu=${TPU_NAME} \
  --steps_per_loop=500

机子测试


image-20220409105607961

image-20220409105635578

8/48 - 25s - loss: 7.1042 - accuracy: 0.0010 - top_5_accuracy: 0.0056 - 25s/epoch - 531ms/step
I0409 03:26:31.511089 139915447860288 classifier_trainer.py:445] Run stats:
{'accuracy_top_1': 0.00103759765625, 'eval_loss': 7.10419225692749, 'loss': 7.114569187164307, 'training_accuracy_top_1': 0.000995297566987574, 'step_timestamp_log': ['BatchTimestamp<batch_index: 0, timestamp: 1649474222.6156414>', 'BatchTimestamp<batch_index: 1251, timestamp: 1649474719.0737512>'], 'train_finish_time': 1649474765.819162, 'avg_exp_per_second': 2358.273703360525}

连接项变更

可以通过手动在TPU管理界面上设置tpu虚拟机加上可抢占式实例的方式降低费用。

连接使用gcloud的手动连接方式。cloudshell

gcloud alpha compute tpus tpu-vm ssh node-2 –zone=asia-east1-c

gcloud alpha compute tpus tpu-vm ssh node-2 --zone=asia-east1-c

//删除内容
gcloud alpha compute tpus tpu-vm delete node-1 \
--zone=asia-east1-c

ResNet-RS-2x

gcloud config set project cloud-function-344710
export PROJECT_ID=cloud-function-344710
gcloud alpha compute tpus tpu-vm ssh node-1 --zone=asia-east1-c
export TPU_NAME=local
pip3 install -r /usr/share/tpu/models/official/requirements.txt

export STORAGE_BUCKET=/home/qq420326084/bucket

export MODEL_DIR=${STORAGE_BUCKET}/resnet-rs-2x
export IMAGENET_DIR=gs://cloud-tpu-test-datasets/fake_imagenet
export PYTHONPATH=/usr/share/models

pip3 install tensorflow-text==2.8.1 --no-deps

python3 /usr/share/tpu/models/official/vision/beta/train.py \
--experiment=resnet_rs_imagenet \
--mode=train_and_eval \
--model_dir=$MODEL_DIR \
--tpu=$TPU_NAME \
--config_file=/usr/share/tpu/models/official/vision/beta/configs/experiments/image_classification/imagenet_resnetrs50_i160.yaml \
--params_override="task.train_data.input_path=$IMAGENET_DIR/train*, task.validation_data.input_path=$IMAGENET_DIR/valid*, trainer.train_steps=100"

暂时失败,么有相关的py文件,没有整个model的包。。。

文档在TPUmodel下面,需要添加tpu 文件夹名。

下面是Bert的语言训练模型。

image-20220411101650293

由人构成的,所以也可以在具体的网站上判断具体的情况作为信号量。

例如Github的fork commit issue的数量判断别人的需求,和人们对预期的判断。

包括论坛,telegram等等都是信号源,这里也包括微信群。

image-20220413163509641

image-20220413185723017

image-20220413185752939