久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Google TPU軟件棧核心組件與JAX/TensorFlow實(shí)戰(zhàn)解析

Google TPU軟件棧核心組件與JAX/TensorFlow實(shí)戰(zhàn)解析 之前一直在 GPU 集群上跑大規(guī)模模型訓(xùn)練直到項(xiàng)目遷移到 Google Cloud TPU 時(shí)才發(fā)現(xiàn)僅僅把訓(xùn)練框架換成 TPU 版本是遠(yuǎn)遠(yuǎn)不夠的。整個(gè)編譯鏈路、數(shù)據(jù)管道、算子融合策略和顯存規(guī)劃都變了踩了一圈坑之后才慢慢把 TPU 軟件棧的運(yùn)作方式理清楚。這篇文章會(huì)把 Google TPU 軟件棧的核心組件拆開梳理并結(jié)合 JAX、TensorFlow 分布式策略給出可落地的訓(xùn)練示例。適合正在評(píng)估 TPU、剛拿到 TPU 配額準(zhǔn)備遷移訓(xùn)練任務(wù)、或者已經(jīng)遇到底層報(bào)錯(cuò)但搜不到完整解釋的開發(fā)者。讀完你能掌握 TPU 的完整軟件鏈路、訓(xùn)練啟動(dòng)方式、常見編譯報(bào)錯(cuò)定位思路以及把模型真正跑在 TPU 上而不只是跑在“模擬器里”的實(shí)踐經(jīng)驗(yàn)。1. TPU 到底是什么不止是“GPU 的替代品”1.1 AI 時(shí)代對(duì)芯片提出的新要求過去十年深度學(xué)習(xí)算力的主力是 GPU。GPU 的核心優(yōu)勢(shì)在于并行計(jì)算能力很強(qiáng)可以同時(shí)處理大量簡(jiǎn)單運(yùn)算非常適合矩陣乘法和卷積這類深度學(xué)習(xí)算子。但隨著模型規(guī)??焖倥蛎浻绕涫谴笠?guī)模 Transformer、推薦系統(tǒng)和多模態(tài)模型出現(xiàn)之后算力需求不再只看單卡峰值還要看集群擴(kuò)展效率、內(nèi)存帶寬、編譯優(yōu)化程度和單位算力的性價(jià)比。Google 正是在這種背景下推出了 TPUTensor Processing Unit張量處理單元。它不是為了替代 GPU 而設(shè)計(jì)的通用芯片而是為了加速 TensorFlow 和 JAX 這類深度學(xué)習(xí)框架中的張量運(yùn)算而專門定制的 ASIC 芯片。你可以把它理解成一個(gè)“為矩陣乘法而生的專用加速器”在特定負(fù)載下的能效比和吞吐表現(xiàn)非常突出。這里的“專用”意味著兩件事一方面TPU 在矩陣運(yùn)算、卷積運(yùn)算和大規(guī)模分布式訓(xùn)練上性能很強(qiáng)另一方面它對(duì)模型結(jié)構(gòu)的支持并不是無條件的某些自定義算子如果不適配 XLA 編譯器會(huì)直接卡在編譯階段。1.2 CPU、GPU、TPU、NPU 的定位區(qū)別先用一個(gè)表格把這幾種芯片的定位區(qū)分清楚芯片全稱定位典型場(chǎng)景CPUCentral Processing Unit通用計(jì)算強(qiáng)順序執(zhí)行操作系統(tǒng)、數(shù)據(jù)庫、邏輯控制GPUGraphics Processing Unit并行計(jì)算通用加速深度學(xué)習(xí)訓(xùn)練、渲染、科學(xué)計(jì)算TPUTensor Processing Unit張量專用 ASICTensorFlow/JAX 大規(guī)模訓(xùn)練與推理NPUNeural Processing Unit神經(jīng)網(wǎng)絡(luò)專用處理器手機(jī)端推理、邊緣 AI、端側(cè)加速從開發(fā)者的角度看這套術(shù)語體系經(jīng)?;煊糜绕涫窃诙藗?cè)場(chǎng)景里 NPU 和 TPU 的界限并不明顯。但如果你做的是云上大規(guī)模訓(xùn)練TPU 和 GPU 的差異會(huì)直接影響代碼寫法、編譯器行為、數(shù)據(jù)加載策略和故障排查方式。1.3 TPU 軟件棧的整體構(gòu)成TPU 硬件本身只是一塊芯片真正讓它跑起來的是軟件棧。Google TPU 軟件棧通常可以分成幾層前端框架層提供 TensorFlow、JAX、PyTorch 等框架的 TPU 后端接口。編譯器層XLAAccelerated Linear Algebra編譯器承擔(dān)了關(guān)鍵的角色。運(yùn)行時(shí)層libtpu、TPU Runtime、設(shè)備驅(qū)動(dòng)等負(fù)責(zé)與硬件通信。系統(tǒng)調(diào)度層在 Cloud TPU 場(chǎng)景下負(fù)責(zé)資源創(chuàng)建、調(diào)度和生命周期管理。下面這張 ASCII 簡(jiǎn)圖可以幫助理解數(shù)據(jù)流向PyTorch / TensorFlow / JAX ↓ 前端圖表示Graph / Program ↓ XLA 編譯器HLO → 優(yōu)化 → LLVM / TPU 指令 ↓ TPU Runtimelibtpu / 設(shè)備驅(qū)動(dòng) ↓ TPU 硬件理解這個(gè)軟件棧是很有必要的因?yàn)楹罄m(xù)很多報(bào)錯(cuò)都不是框架層報(bào)出來的而是 XLA 編譯階段拋出的。你不能只盯著 TensorFlow 的報(bào)錯(cuò)堆??催€得順著 XLA 的報(bào)錯(cuò)信息往下追。2. TPU 軟件棧核心組件拆解2.1 XLA 編譯器從框架圖到 TPU 指令的橋梁XLA 是 TPU 軟件棧里最核心、最容易被忽視的一層。XLA 的全稱是 Accelerated Linear Algebra它是 Google 推出的領(lǐng)域?qū)S镁幾g器專門用來把 TensorFlow、JAX 等框架的計(jì)算圖編譯成高效的底層指令。XLA 的工作過程大致如下框架層把計(jì)算任務(wù)表達(dá)成計(jì)算圖或程序。XLA 將計(jì)算圖轉(zhuǎn)換成 HLOHigh Level Operations高級(jí)操作表示。XLA 在 HLO 層面上做優(yōu)化包括算子融合Fusion、常量折疊Constant Folding、內(nèi)存分配規(guī)劃、并行化調(diào)度等。最終把 HLO 編譯成目標(biāo)設(shè)備的 LLVM IR 或 TPU 專用指令序列。在 JAX 中jax.jit裝飾器就是觸發(fā) XLA 編譯的入口。當(dāng)你給一個(gè)函數(shù)加上jax.jit時(shí)JAX 會(huì)做兩件事把函數(shù)轉(zhuǎn)換成計(jì)算圖然后交給 XLA 編譯。import jax import jax.numpy as jnp # 加 jit 后函數(shù)不會(huì)一行一行執(zhí)行而是整體編譯后執(zhí)行 jax.jit def linear(x, w, b): return jnp.dot(x, w) b x jnp.ones((8, 128)) w jnp.ones((128, 64)) b jnp.ones((64,)) y linear(x, w, b) print(y.shape)這里需要注意jax.jit并不是簡(jiǎn)單地把函數(shù)內(nèi)部代碼“合并成一個(gè)整體”而是讓 XLA 拿到整個(gè)計(jì)算流程后做算子融合。比如上面的matmul addXLA 在編譯后很可能融合成一個(gè)融合算子Fusion減少核函數(shù)啟動(dòng)次數(shù)和設(shè)備緩存回寫的次數(shù)。生產(chǎn)環(huán)境里XLA 編譯失敗通常表現(xiàn)為類似“Detected unsupported operations when trying to compile graph”的報(bào)錯(cuò)這類問題不是簡(jiǎn)單的語法錯(cuò)誤而是某個(gè)算子 XLA 還不支持或無法高效融合。2.2 JAX 與 TensorFlow 對(duì) TPU 的支持方式JAX 是目前 Google 官方推薦的 TPU 訓(xùn)練框架之一。JAX 的設(shè)計(jì)思路是把 NumPy 風(fēng)格的 API 和自動(dòng)微分、JIT 編譯結(jié)合再配合pmap、shard_map等并行抽象天然適合 TPU 這種需要精確控制數(shù)據(jù)切分的加速器。TensorFlow 對(duì) TPU 的支持則主要通過TPUStrategy實(shí)現(xiàn)。TPUStrategy是 TensorFlow 分布式策略中的一種它負(fù)責(zé)把模型變量、優(yōu)化器狀態(tài)和數(shù)據(jù)分配到多個(gè) TPU 核心上。PyTorch 用戶也不用太擔(dān)心PyTorch/XLA 項(xiàng)目已經(jīng)提供了torch_xla包讓 PyTorch 模型可以跑在 TPU 上同時(shí)支持 XLA 編譯優(yōu)化。不過平心而論P(yáng)yTorch 在 TPU 上的生態(tài)成熟度目前不如 JAX 和 TensorFlow如果你是從 PyTorch 社區(qū)遷移過來的建議預(yù)留更多時(shí)間做算子兼容性驗(yàn)證。2.3 libtpu 與低層運(yùn)行時(shí)libtpu 是 TPU 的低層運(yùn)行時(shí)庫負(fù)責(zé)主機(jī)與 TPU 設(shè)備之間的通信、內(nèi)存管理、指令提交等。在 Cloud TPU 環(huán)境中用戶代碼通過 gRPC 與 TPU Worker 通信但具體指令的下發(fā)是由 libtpu 完成的。這里想強(qiáng)調(diào)一個(gè)容易踩坑的點(diǎn)TPU 的虛擬地址頁大小是 16KB而絕大多數(shù) x86 Linux 主機(jī)默認(rèn)是 4KB 頁大小。當(dāng)你用 pip 安裝編譯好的包時(shí)如果包本身是在 4KB 頁環(huán)境下編譯的運(yùn)行到低層庫調(diào)用階段可能出現(xiàn)頁面大小不匹配的報(bào)錯(cuò)這就是網(wǎng)上常見的“an error occurred while preparing sdk package 16 kb page size”一類問題的底層背景。解決思路通常不是修改內(nèi)核頁大小而是從官方渠道獲取與 TPU 運(yùn)行環(huán)境匹配的預(yù)編譯包或者在你的 TPU 虛擬機(jī)上重新編譯相關(guān)依賴而不是直接把本地 x86 環(huán)境里的包復(fù)制到 TPU 環(huán)境。3. 環(huán)境準(zhǔn)備與 TPU 獲取方式3.1 Cloud TPU 與 Colab 的選擇搭建 TPU 軟件棧的第一步是獲取 TPU 環(huán)境。根據(jù)場(chǎng)景不同有幾種主流選擇Google Cloud TPU適合長(zhǎng)期訓(xùn)練任務(wù)支持創(chuàng)建 TPU Pod 和 TPU VM。Google Colab提供免費(fèi)的 TPU 運(yùn)行時(shí)適合學(xué)習(xí)和小規(guī)模實(shí)驗(yàn)。TPU Research Cloud面向研究者的免費(fèi) TPU 配額項(xiàng)目適合科研場(chǎng)景。本地模擬器適合調(diào)試代碼邏輯但性能完全不能代替真實(shí) TPU。如果你是第一次接觸 TPU建議從 Colab 開始它能用很短的時(shí)間驗(yàn)證你的代碼是否走通了 TPU 軟件鏈路。等代碼穩(wěn)定后再上 Cloud TPU 集群做真實(shí)規(guī)模訓(xùn)練。下面通過一個(gè)簡(jiǎn)單的命令檢查 TPU 運(yùn)行時(shí)環(huán)境關(guān)鍵信息# 確認(rèn) Python 版本 python3 --version # 確認(rèn) TPU 設(shè)備是否可見在 TPU VM 或 Colab TPU 上執(zhí)行 ls /dev/accel* 2/dev/null || echo no accelerator device found # 查看安裝的關(guān)鍵包版本 pip list 2/dev/null | grep -Ei jax|tensorflow|torch|xla在實(shí)際 Cloud TPU v4 或更高版本的 TPU VM 環(huán)境中設(shè)備節(jié)點(diǎn)通常不是/dev/tpu而是/dev/accel0、/dev/accel1這類路徑這一點(diǎn)和傳統(tǒng) GPU 環(huán)境有所不同。3.2 JAX 環(huán)境變量與初始化JAX 在 TPU 上運(yùn)行前需要確認(rèn)設(shè)備已經(jīng)初始化成功。在 Colab 的較新版本 JAX 中通常會(huì)自動(dòng)識(shí)別 TPU但如果你使用的是舊版本或使用自定義鏡像就需要手動(dòng)初始化import jax import jax.numpy as jnp # 有些舊版本需要手動(dòng)初始化 TPU # 新版 JAX 一般會(huì)自動(dòng)初始化無需顯式調(diào)用 try: from jax.tools import colab_tpu colab_tpu.setup_tpu() except Exception as e: print(Manual TPU init skipped or already supported:, e) # 查看當(dāng)前所有可用設(shè)備 devices jax.devices() print(JAX devices:, devices) print(JAX default backend:, jax.default_backend())運(yùn)行正常的情況下jax.devices()會(huì)返回 TPU 設(shè)備列表jax.default_backend()返回tpu。如果你的輸出是cpu或gpu說明 JAX 并沒有真正訪問 TPU需要檢查鏡像版本或運(yùn)行環(huán)境。有一個(gè)經(jīng)常被忽略的問題Colab TPU 切換后必須重啟運(yùn)行時(shí)、重新安裝 JAX 版本否則 JAX 內(nèi)部緩存的設(shè)備信息不會(huì)刷新。如果切換 TPU 類型后jax.devices()仍然顯示舊的設(shè)備列表優(yōu)先考慮重啟運(yùn)行時(shí)而不是調(diào)試代碼。3.3 從源代碼編譯還是預(yù)編譯包在 TPU 上安裝 JAX 時(shí)我一直建議優(yōu)先使用官方發(fā)布的預(yù)編譯包因?yàn)檫@些包會(huì)和 TPU 的頁大小、指令集和運(yùn)行時(shí)庫做過匹配測(cè)試。只有在需要修改 JAX 源碼、debug 底層行為或者在 TPU VM 上做二次開發(fā)時(shí)才考慮從源碼編譯。下面是一個(gè)在 TPU VM 上安裝 JAX 的典型流程# 激活虛擬環(huán)境 python3 -m venv venv source venv/bin/activate # 安裝 JAX 的 TPU 版本 # 更準(zhǔn)確的安裝命令需要參考官方文檔關(guān)鍵是根據(jù) TPU 版本和系統(tǒng)架構(gòu)選擇匹配的 wheel pip install --upgrade jax[tpu] -f https://storage.googleapis.com/jax-releases/libtpu_releases.html # 驗(yàn)證安裝 python3 -c import jax; print(jax.devices())需要注意jax[tpu]這個(gè) extra 的依賴列表和可用的 wheel 索引會(huì)隨著版本變化建議以官方 JAX 倉庫或 Google Cloud 文檔中的安裝命令為準(zhǔn)。不匹配的版本經(jīng)常導(dǎo)致 libtpu 無法加載報(bào)錯(cuò)信息里會(huì)出現(xiàn)類似“Could not load libtpu.so”的字樣。4. 完整實(shí)戰(zhàn)用 JAX 在 TPU 上訓(xùn)練一個(gè)圖像分類模型講完概念和準(zhǔn)備下面進(jìn)入完整實(shí)戰(zhàn)環(huán)節(jié)。這里以 JAX 為例一步步演示從數(shù)據(jù)加載到 TPU 訓(xùn)練的全過程。4.1 創(chuàng)建項(xiàng)目結(jié)構(gòu)與準(zhǔn)備數(shù)據(jù)先創(chuàng)建一個(gè)項(xiàng)目目錄把代碼按模塊劃分好tpu-jax-demo/ ├── main.py ├── model.py ├── data.py ├── train.py └── requirements.txt數(shù)據(jù)部分使用 TensorFlow Datasets 中的 MNIST 數(shù)據(jù)集。MNIST 雖然簡(jiǎn)單但它覆蓋了數(shù)據(jù)加載、批量切分、訓(xùn)練循環(huán)、模型保存的完整流程很適合用來驗(yàn)證 TPU 軟件棧是否正常工作。創(chuàng)建requirements.txtjax[tpu] tensorflow-cpu tensorflow-datasets optax這里特意引入optax作為優(yōu)化器庫它是 JAX 生態(tài)中最常用的優(yōu)化器集合后續(xù)如果要替換成 AdamW、LAMB 或自定義學(xué)習(xí)率調(diào)度直接改一行配置即可。4.2 編寫數(shù)據(jù)加載模塊創(chuàng)建data.pyimport tensorflow_datasets as tfds # 加載 MNIST 數(shù)據(jù)并轉(zhuǎn)換為 NumPy 數(shù)組 def load_mnist(batch_size128): ds tfds.load(mnist, split[train, test], as_supervisedTrue) def prepare(dataset): dataset dataset.map(lambda x, y: (tf.cast(x, tf.float32) / 255.0, y)) dataset dataset.batch(batch_size) dataset dataset.prefetch(tf.data.AUTOTUNE) return dataset train_ds prepare(ds[0]) test_ds prepare(ds[1]) return train_ds, test_ds在 TPU 訓(xùn)練中數(shù)據(jù)加載是一個(gè)經(jīng)常被忽略的瓶頸。CPU 端的數(shù)據(jù)加載速度如果跟不上 TPU 的消費(fèi)速度訓(xùn)練曲線會(huì)出現(xiàn)明顯的周期性停頓。prefetch是解決這個(gè)問題的最簡(jiǎn)單手段。4.3 定義模型與訓(xùn)練循環(huán)創(chuàng)建model.pyimport jax.numpy as jnp from flax import linen as nn # 簡(jiǎn)單卷積網(wǎng)絡(luò) class SimpleCNN(nn.Module): nn.compact def __call__(self, x, training: bool True): x nn.Conv(features32, kernel_size(3, 3), paddingSAME)(x) x nn.relu(x) x nn.max_pool(x, window_shape(2, 2), strides(2, 2)) x nn.Conv(features64, kernel_size(3, 3), paddingSAME)(x) x nn.relu(x) x nn.max_pool(x, window_shape(2, 2), strides(2, 2)) x x.reshape((x.shape[0], -1)) x nn.Dense(features128)(x) x nn.relu(x) x nn.Dense(features10)(x) return x這里使用 Flax 來定義模型。Flax 是 Google 官方維護(hù)的 JAX 神經(jīng)網(wǎng)絡(luò)庫和 JAX 一起使用時(shí)體驗(yàn)最自然。如果你之前用過 PyTorch 的nn.ModuleFlax 的nn.Module風(fēng)格會(huì)比較接近。創(chuàng)建train.py這是訓(xùn)練循環(huán)的核心import jax import jax.numpy as jnp import optax from flax.training import train_state from model import SimpleCNN from data import load_mnist def cross_entropy_loss(logits, labels): one_hot jax.nn.one_hot(labels, num_classes10) return -jnp.mean(jnp.sum(one_hot * jax.nn.log_softmax(logits), axis-1)) def compute_metrics(logits, labels): loss cross_entropy_loss(logits, labels) accuracy jnp.mean(jnp.argmax(logits, axis-1) labels) return loss, accuracy jax.jit def train_step(state, batch): images, labels batch def loss_fn(params): logits state.apply_fn({params: params}, images, trainingTrue) return cross_entropy_loss(logits, labels) loss, grads jax.value_and_grad(loss_fn)(state.params) state state.apply_gradients(gradsgrads) return state, loss jax.jit def eval_step(state, batch): images, labels batch logits state.apply_fn({params: state.params}, images, trainingFalse) return compute_metrics(logits, labels) def create_train_state(rng, learning_rate): model SimpleCNN() params model.init(rng, jnp.ones((1, 28, 28, 1)))[params] tx optax.adam(learning_rate) return train_state.TrainState.create(apply_fnmodel.apply, paramsparams, txtx) def main(): rng jax.random.PRNGKey(0) state create_train_state(rng, learning_rate1e-3) train_ds, test_ds load_mnist(batch_size128) # 將 TensorFlow Dataset 轉(zhuǎn)換為 NumPy Iterator train_iter iter(train_ds) test_iter iter(test_ds) for epoch in range(3): for step in range(100): batch next(train_iter) images batch[0].numpy() labels batch[1].numpy() state, loss train_step(state, (images, labels)) if step % 20 0: print(fepoch {epoch} step {step} loss {loss:.4f}) # 每個(gè) epoch 結(jié)束評(píng)估一次 total_loss 0.0 total_acc 0.0 num_batches 0 for _ in range(50): batch next(test_iter) images batch[0].numpy() labels batch[1].numpy() loss, acc eval_step(state, (images, labels)) total_loss loss total_acc acc num_batches 1 print(fepoch {epoch} eval loss {total_loss / num_batches:.4f} facc {total_acc / num_batches:.4f}) if __name__ __main__: main()這段代碼有幾個(gè)關(guān)鍵點(diǎn)使用jax.jit裝飾訓(xùn)練和評(píng)估函數(shù)讓 XLA 將整個(gè)計(jì)算過程編譯成融合算子。每個(gè) batch 通過.numpy()從 TensorFlow Dataset 轉(zhuǎn)換為 NumPy 數(shù)組供 JAX 消費(fèi)。訓(xùn)練狀態(tài)由TrainState統(tǒng)一管理包含模型參數(shù)和優(yōu)化器狀態(tài)。打印網(wǎng)絡(luò)在 MNIST 上的 loss 和 acc用來驗(yàn)證模型真實(shí)地訓(xùn)練起來了。4.4 真機(jī)運(yùn)行與驗(yàn)證在 Colab 或 TPU VM 上執(zhí)行python3 train.py正常輸出會(huì)類似epoch 0 step 0 loss 2.3021 epoch 0 step 20 loss 0.4218 epoch 0 step 40 loss 0.2534 epoch 0 step 60 loss 0.1842 epoch 0 step 80 loss 0.1507 epoch 0 eval loss 0.0852 acc 0.9734 ...看到 loss 在下降、eval accuracy 穩(wěn)步上升說明 JAX XLA TPU 這條鏈路已經(jīng)跑通了。接下來就可以把這里的SimpleCNN替換成真實(shí)模型把load_mnist替換成你的真實(shí)數(shù)據(jù)集。4.5 關(guān)于多卡 TPU 的擴(kuò)展思路上面的代碼是單進(jìn)程、單 TPU 核心訓(xùn)練的寫法。如果你創(chuàng)建的是多核心 TPUJAX 會(huì)自動(dòng)識(shí)別多個(gè)設(shè)備。想要利用多個(gè)核心并行訓(xùn)練最簡(jiǎn)單的方式是使用jax.device_put和pmap對(duì) batch 做數(shù)據(jù)并行切分。from jax import pmap # 將狀態(tài)復(fù)制到所有設(shè)備 state jax.device_put_replicated(state, jax.devices()) # 多設(shè)備并行訓(xùn)練步驟 pmap def train_step_multi(state, batch): return train_step(state, batch) # 切分 batch 到多個(gè)設(shè)備 images images.reshape((num_devices, -1) images.shape[1:]) labels labels.reshape((num_devices, -1))這只是一個(gè)非常簡(jiǎn)化的pmap示例真實(shí)多卡訓(xùn)練還要考慮 batch 切分策略、梯度累積、AllReduce 等細(xì)節(jié)。建議先把單 core 代碼跑通再逐步過渡到pmap或shard_map。5. TensorFlow 方式用 TPUStrategy 做分布式訓(xùn)練雖然 JAX 在 TPU 上體驗(yàn)越來越主流但生產(chǎn)環(huán)境中大量存量代碼還是 TensorFlow 的。如果你不想重寫模型可以直接使用 TensorFlow 的TPUStrategy把現(xiàn)有模型遷移到 TPU。5.1 TPUStrategy 工作原理TPUStrategy是 TensorFlow 的分布式策略之一。它會(huì)自動(dòng)完成幾件事把模型變量復(fù)制到每個(gè) TPU 核心。把全局 batch 切分成每個(gè)核心處理一個(gè)子 batch。優(yōu)化器在反向傳播后做跨核心梯度 AllReduce。對(duì)訓(xùn)練循環(huán)內(nèi)部使用tf.function編譯配合 XLA 加速。它的關(guān)鍵思路是“數(shù)據(jù)并行 同步更新”。用戶只需要寫一份單機(jī)單卡代碼策略層負(fù)責(zé)把計(jì)算擴(kuò)展到多個(gè) TPU 核心上。5.2 TPUStrategy 訓(xùn)練示例import tensorflow as tf # 1. 初始化 TPU resolver tf.distribute.cluster_resolver.TPUClusterResolver() tf.config.experimental_connect_to_cluster(resolver) tf.tpu.experimental.initialize_tpu_system(resolver) strategy tf.distribute.TPUStrategy(resolver) print(TPU devices:, resolver.cluster_spec().as_dict()) # 2. 在 strategy 作用域內(nèi)構(gòu)建模型 with strategy.scope(): model tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3, 3), activationrelu, input_shape(28, 28, 1)), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Conv2D(64, (3, 3), activationrelu), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activationrelu), tf.keras.layers.Dense(10), ]) model.compile( optimizertf.keras.optimizers.Adam(1e-3), losstf.keras.losses.SparseCategoricalCrossentropy(from_logitsTrue), metrics[accuracy], ) # 3. 準(zhǔn)備數(shù)據(jù) (x_train, y_train), (x_test, y_test) tf.keras.datasets.mnist.load_data() x_train x_train.reshape((-1, 28, 28, 1)).astype(float32) / 255.0 x_test x_test.reshape((-1, 28, 28, 1)).astype(float32) / 255.0 # 4. 訓(xùn)練 model.fit( x_train, y_train, batch_size128, epochs3, validation_data(x_test, y_test), )TPUStrategy的遷移成本很低尤其適合原本就是 Keras 寫的模型。如果你的模型里含有自定義tf.Variable更新邏輯就需要確認(rèn)變量創(chuàng)建是否都發(fā)生在strategy.scope()內(nèi)。5.3 TFRecord 數(shù)據(jù)管道與 TPU 的配合真實(shí)訓(xùn)練中數(shù)據(jù)通常在 GCS 上推薦使用 TFRecord 格式來減少小文件數(shù)量提高 TPU 的讀取效率。import tensorflow as tf def decode_fn(record_bytes): features { image: tf.io.FixedLenFeature([28 * 28], tf.float32), label: tf.io.FixedLenFeature([], tf.int64), } parsed tf.io.parse_single_example(record_bytes, features) image tf.reshape(parsed[image], (28, 28, 1)) return image, parsed[label] def build_dataset(file_pattern, batch_size, is_trainingTrue): dataset tf.data.Dataset.list_files(file_pattern) dataset dataset.interleave( tf.data.TFRecordDataset, cycle_length8, num_parallel_callstf.data.AUTOTUNE, ) dataset dataset.map(decode_fn, num_parallel_callstf.data.AUTOTUNE) if is_training: dataset dataset.shuffle(10000).repeat() dataset dataset.batch(batch_size, drop_remainderTrue) dataset dataset.prefetch(tf.data.AUTOTUNE) return dataset數(shù)據(jù)管道本身是 CPU 上的工作但它的吞吐能力直接決定了 TPU 是否被喂飽。經(jīng)驗(yàn)法則是數(shù)據(jù)管道的吞吐至少要達(dá)到模型訓(xùn)練速度的 2 倍否則訓(xùn)練過程中會(huì)不斷出現(xiàn)“等待數(shù)據(jù)”的空窗期。6. 常見問題與排查思路6.1 TPU 初始化失敗或設(shè)備不可見問題現(xiàn)象RuntimeError: Unable to initialize the TPU system.可能原因當(dāng)前運(yùn)行時(shí)不是 TPU 環(huán)境。JAX/TensorFlow 版本與 TPU 運(yùn)行時(shí)版本不匹配。運(yùn)行時(shí)使用舊內(nèi)核沒有加載必要的驅(qū)動(dòng)。排查步驟先檢查設(shè)備文件是否存在在 TPU VM 上執(zhí)行l(wèi)s /dev/accel*。再執(zhí)行jax.devices()或tf.config.list_logical_devices(TPU)看框架層是否識(shí)別到設(shè)備。確認(rèn)虛擬環(huán)境中的包版本與當(dāng)前 TPU 版本匹配。重啟運(yùn)行時(shí)尤其是在切換 TPU 類型之后。6.2 XLA 編譯報(bào)錯(cuò) “unsupported operations”問題現(xiàn)象Detected unsupported operations when trying to compile graph可能原因模型里使用了 XLA 不支持的算子。自定義 Layer 或自定義 JAX 函數(shù)里調(diào)用了無法被轉(zhuǎn)換成 HLO 的 Python 控制流。解決思路逐步裁剪模型定位到具體是哪個(gè)操作不能被編譯。檢查是否是動(dòng)態(tài)形狀問題TPU 上盡量避免 runtime shape 變化。對(duì)自定義算子優(yōu)先考慮能否用現(xiàn)有的 JAX 原生操作重寫。6.3 關(guān)于 16KB page size 編譯包報(bào)錯(cuò)問題現(xiàn)象在安裝或運(yùn)行 TPU SDK 相關(guān)包時(shí)出現(xiàn)類似 “an error occurred while preparing sdk package 16 kb page size” 的報(bào)錯(cuò)。背景原因TPU 運(yùn)行環(huán)境的虛擬地址頁大小是 16KB而常見 x86 Linux 是 4KB 頁。本地下載的預(yù)編譯 wheel 如果是在 4KB 頁環(huán)境下構(gòu)建的運(yùn)行時(shí)會(huì)與 TPU 內(nèi)核模塊或運(yùn)行時(shí)庫不兼容。解決思路不要直接從普通 PyPI 鏡像安裝 TPU 相關(guān)包優(yōu)先使用官方發(fā)布渠道。在 TPU VM 內(nèi)重新安裝匹配版本而不是把本地環(huán)境復(fù)制過去。查看完整日志確認(rèn)是下載失敗還是安裝后運(yùn)行時(shí)崩潰。6.4 OOM 與 batch size 調(diào)整問題現(xiàn)象訓(xùn)練時(shí)出現(xiàn)Resource exhausted錯(cuò)誤??赡茉騜atch size 過大超出了 TPU 單核的 HBM 容量。模型參數(shù)或中間激活值過大。數(shù)據(jù)管道prefetch使用內(nèi)存過多。解決思路先嘗試減小 batch size確認(rèn)模型在單卡上可以跑通。合理設(shè)置prefetch和num_parallel_calls避免 CPU 端內(nèi)存溢出。檢查 XLA 是否啟用了內(nèi)存優(yōu)化選項(xiàng)但不要盲目相信默認(rèn)配置。6.5 排查清單匯總問題現(xiàn)象常見原因解決思路設(shè)備不可見運(yùn)行時(shí)環(huán)境錯(cuò)誤 / 版本不匹配檢查/dev/accel*重啟運(yùn)行時(shí)核對(duì)版本XLA 編譯失敗不支持的算子 / 動(dòng)態(tài) shape簡(jiǎn)化模型逐步定位避免動(dòng)態(tài)形狀16KB page size 報(bào)錯(cuò)wheel 與 TPU 頁大小不匹配使用官方發(fā)布渠道安裝匹配包OOMbatch size 過大 / 中間激活過大調(diào)整 batch size優(yōu)化數(shù)據(jù)管道內(nèi)存訓(xùn)練速度上不去數(shù)據(jù)管道存在瓶頸使用 TFRecord、interleave、prefetch 優(yōu)化輸出結(jié)果有 NaN學(xué)習(xí)率過高 / 精度配置不當(dāng)降低學(xué)習(xí)率使用混合精度時(shí)檢查損失縮放7. 最佳實(shí)踐與工程建議7.1 數(shù)據(jù)管道要提前壓測(cè)TPU 非常“挑食”它的運(yùn)算速度快到如果數(shù)據(jù)管道沒跟上訓(xùn)練就會(huì)空等。建議在正式訓(xùn)練前先單獨(dú)測(cè)試數(shù)據(jù)管道的吞吐能力。import time train_iter iter(train_ds) start time.time() for i in range(100): batch next(train_iter) end time.time() print(f100 batches take {end - start:.2f}s)如果數(shù)據(jù)讀取時(shí)間占比過高優(yōu)先使用 TFRecord 格式、interleave并行讀取、prefetch預(yù)加載等手段。7.2 使用混合精度時(shí)需要驗(yàn)證損失縮放TPU 的 bfloat16 支持是它的強(qiáng)項(xiàng)之一。用jax時(shí)可以很自然地把部分參數(shù)轉(zhuǎn)換成bfloat16或使用混合精度訓(xùn)練。但在混合精度下梯度很小的時(shí)候有可能在低精度下溢出導(dǎo)致 NaN。建議開啟損失縮放Loss Scaling機(jī)制并周期性檢查梯度統(tǒng)計(jì)而不是在出現(xiàn) NaN 后才去排查。7.3 模型算子優(yōu)先考慮 JAX/TensorFlow 原生實(shí)現(xiàn)遇到自定義算子時(shí)優(yōu)先檢查原生庫里有沒有替代實(shí)現(xiàn)。XLA 對(duì)原生算子的融合優(yōu)化做得很成熟但自定義算子往往無法被融合會(huì)打亂 XLA 的優(yōu)化策略。如果一定要使用自定義算子至少把“無法編譯”的算子獨(dú)立出來避免拖累整體性能。7.4 成本與資源管理TPU 資源通常是按時(shí)計(jì)費(fèi)的長(zhǎng)期任務(wù)建議配合 checkpoint 和自動(dòng)重啟機(jī)制。這里給出幾個(gè)實(shí)用性建議訓(xùn)練腳本要有穩(wěn)定的 checkpoint 保存與恢復(fù)邏輯。使用搶占式資源時(shí)代碼要能安全處理進(jìn)程中途被回收的情況。創(chuàng)建 TPU 實(shí)例后盡快驗(yàn)證訓(xùn)練腳本避免空轉(zhuǎn)計(jì)費(fèi)。配置監(jiān)控報(bào)警對(duì)異常掉線、訓(xùn)練停滯、指標(biāo)不回傳這些情況做告警。7.5 把訓(xùn)練過程日志化TPU 上的日志查看比 GPU 環(huán)境要麻煩一些尤其是多 worker 場(chǎng)景下。推薦在訓(xùn)練腳本中顯式記錄關(guān)鍵指標(biāo)比如每個(gè) epoch 的 loss、acc、每個(gè) step 的平均耗時(shí)、數(shù)據(jù)加載耗時(shí)等并把日志輸出到統(tǒng)一的日志平臺(tái)方便后續(xù)歸因。import logging logging.basicConfig( levellogging.INFO, format%(asctime)s %(levelname)s %(message)s, ) logging.info(start training, devices%s, jax.devices())這一步可能看起來不起眼但當(dāng)你遇到 TPU 訓(xùn)練中途卡死、重啟、性能退化問題時(shí)這些日志是定位問題的唯一線索。8. 總結(jié)Google TPU 軟件棧本質(zhì)上是一條從深度學(xué)習(xí)框架到專用硬件的編譯和運(yùn)行鏈路JAX、TensorFlow、XLA 和 libtpu 各司其職。對(duì)開發(fā)者而言遷移到 TPU 時(shí)最需要調(diào)整的往往不是模型結(jié)構(gòu)本身而是對(duì)計(jì)算圖編譯、數(shù)據(jù)切分、內(nèi)存規(guī)劃這些底層層面的理解。如果你準(zhǔn)備開始嘗試建議從 Colab 免費(fèi) TPU 環(huán)境入手把 MNIST 或自己的小型模型跑通再逐步擴(kuò)展到真實(shí)業(yè)務(wù)模型。遇到 16KB page size、XLA 編譯失敗、TPU 設(shè)備不可見這類問題先順著軟件棧的層級(jí)逐層排查不要一開始就懷疑硬件。只要把 JAX 或 TensorFlow 的 TPU 鏈路跑通一遍后續(xù)在 Cloud TPU 上做規(guī)?;?xùn)練會(huì)順暢得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷丁香九月| 丁香五月天婷婷姐| 麻豆国产视频精品观看| 日韩成人人妻网站| 大香蕉手机在线| 岛国艾薇凹凸视频天堂| 97国产伦理| 亚洲日韩视频二区| 风月影院男女十八禁| 国产午夜精品在线观看| 亚洲少妇色| 亚洲成人一区二区精品| 任我爽在线视频免费观看 | 做爱福利视频一区二区| 成人五月香网在线| 人人妻人人澡人人爽人人精品浪潮| 亚洲国产精品久久久男人的天堂| 午夜.DJ高清在线观看免费7| 欧美日韩中国x| 色噜噜狠狠色综合日日| 尤物一级在线免费观看| 中文字幕一区二区三区四五区| 国产60区。| 最新岛国大片| 无码操逼网| 亚洲 欧美 第一页| 亚洲、日韩、综合、另类| 放黄片放3级黄片没穿衣服| 九九黄色网| 粉嫩AV一区夜夜嗨| 欧美综合综合| 超清福利精品视频在线| 91精品无码久久久久久久| 正宗无毛一线天嫩逼| 九九精品美女高溯喷水| 激情综合二| 人妻干天天| 女生久久网| 亚洲综合色图欧美| 国产乱子伦一区二区三区免看| 日日橹狠狠爱欧美超碰| 蜜桃视频成a人v在线| 国产成年女人免费视频播放a| 97综合国产| 999精品国产高清一区二区| 九九九热| 日韩国产在线观看av| 成人免费在线网站| 一级久久久久久久久久久| 免费在线观看AV无码网站| 91久久婷婷| 一区三区啪啪| 99热这里只有精品9| 日韩啪啪视频| 久久色一区| 久久亚洲影院一区二区| 国产精品视频播放| 天天伊人| 欧美黑人精品一区二区| 第二页中文字幕| 国产一区二区啪啪视频| 爽 好舒服 无码刺激久久| 男人天堂电影院| 亚洲欧美综合区自拍另类 | 高清成年美女黄网站免费大全| 高清无码久操视频| 欧美激情欧美精品| 亚洲精品97| 欧美极品女人的天堂| 成人一二三区| 欧美|91色综合| 视频一区二区三区精品| 久久久婷| 欧美一区二区三区四区综合| 射丝袜大香蕉| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 亚洲视频精选| caopeng97| 黄色大片免费在线| 密臀在线视频| 欧美色五月| 久久99热这里只频精品6学生| 天天舔日美女视频| 日本国产欧美高清在线| 九热大香蕉| 久久精品店| 亚洲国产97| www.99在线| 婷婷探花久久精品一区| 熟女激情综合网| 国产AV线| 成人乱码一区二区三少妇| 男女无套 免费网站| 老司机午夜精品视频| 韩国黄片aaaa| 蜜桃久久久久久久| 精品成人亚洲午夜电影| 色婷网| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 国产剧情一区在线观看| 天天射夜夜操| 日本久久久久久久久久| 老女人老91妇女老热女| 日韩一999精品| 久久综合18p| 美国日韩黄片| 欧美色乱| 极品销魂美女一区二区| 激情小说激情视频| 日韩色欲久久一二三四区| 日韩熟女精一区二区三区不卡| 色妺妺AⅤ| 色色色欧美| 日韩精品资源专区二区| 97精品免费视频网站| 日韩日韩日韩-国产乱码精品一区二区| 屌妞视频久久久久久久| 久久久久久9999| 国产25页| 夜夜国自区| 超碰99在线| 亚洲性天堂| 校园春色之综合网| 国产自产91区13区| 超碰色男人操熟女| 日产精品久久久一区二区| 中文字幕一区二区三区视频播放| 性色AV蜜色av色欲av| 蜜桃成人1区2区3区| 超碰人人在线| 欧洲综合视频| 小骚逼被操的爽不爽| 美日韩成人| 日本午夜福利视频| 国产在线视频二区| 五月黑AⅤ| 午夜福利免费精品视频| 美熟女逼导航AV操逼| 黄片在线免费在线观看| 色五月婷婷网| 欧美三级中文字幕hd| 啊嗯嗯啊好大好爽| 韩国一级婬片A片无码天美| 日本二区不卡| 国产亚洲深夜激情| 日韩精品影视| 国产成人午夜视频网址| 人妻在线臀日韩| 亚洲三级。日韩三级| 日本一级真人黄色性爱视频| 人人操av| 东京太热男人的天堂久久久| 日日97| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 高树玛利亚无码流出| 六月激情网| av在线观看不卡网站| 91天堂色男人的天堂| 日本99视频| 强奸乱伦大香蕉网| 少妇蜜汁| 熟女高潮合集-永久久久-成人AV| 91女优在线观看| 好涩综合| 日韩A优精品在线观看| av在线资源| 99热精品青草在线 | 久久久久久久久国产| 干B网| 视频一区二区三区精品| 高清不卡一二三区视频......| 免费的很黄很污的全部视频| 日本东京热大香蕉a片| 午夜精品久久久久| 超碰无码加勒比| 俺去俺来也在线www| 亚洲αv一区二区三区| 五月天婷婷成人网| 国产精品久久久久久久黄无码| 日韩欧美经典在线观看| 国产AV中文| 欧美色图成人网一区二区| 97亚洲色图| 午夜呻吟欧美| 亚洲国产精品成人综合| 人妻激情在线视频| 亚洲av综合伊人久久| 97超碰人人操人人操| 欧美 亚洲 第一页 | 亚州男人天堂| 大黄片做爱的大的| 久操视频免费观看| 97国产高清视频在线观看| 日韩中文字幕2020| 综合熟妇一区二区三区| 人妻天天爽天天爽三区| 手机看片1024你懂的国产| 中文字幕人成乱码熟女香港| 日日干男人的天堂| 中美日韩毛片| 国产91乱伦| 日韩中文字幕二区| 丁香五月天堂网| 国产精品久久泡妞网站| 天天色欧美| 插穴性爱视频在线观看| 国产精品一级毛片不卡视| 国产精品网址| 亚洲一区二区麻豆影院| 欧美性爱1080p| 99re这里只有| 激情欧美日韩女同久久| 精品视频久久久久九九九九9999| 国产视频人人网| 少妇69中文| 99激情视频| 亚洲成人色情五月天丁香花| 人人妻人人爱人人玩| 亚洲一二三精品久久网| 免费强奸av| 日韩强奸av| 中文熟女五十乱码在线| 天天综合网~91入口| 亚洲情色91| 亚洲av影院在线观看| 欧美 精品国产制服第一页| 日本黄页视频在线观看| 精品无码一二三四区| 青青草中文-久久青草精品一区二区三 | 国产丝袜美女在线一区| 成人国产视频在线观看| 中文?日韩?免费?精品| 亚洲国内精品成人不卡| 韩国一区二区精品亚洲| 富女玩鸭子一级毛片| 久久久久大香青草精品综合| 97超色| 国产人妻久久精品一区二区三区| 天天干人妻| 色色色综合| 亚洲国产第一页综合视频| 99re久久| 英伦大奶子熟妇吊带| 亚洲精品久久久久久久蜜桃臀| 综合免费无码中文| 日韩性爱高清免费视频| 成人精品在线观看| 青娱乐 成人娱乐在线| 91九九| 日韩成人电影AV| av天天在线观看| 久久久久久久少妇| 免费看一级a性色生活片久久无| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 超碰97男人| 中文字幕十五区| 天天搞欧美| 久久久精选| 中文字幕片| 日日橹狠狠爱欧美超碰| 日韩精品人妻中文字幕不卡乱码| 99re9这里只有精品| 欧美视频激情久久久久久| 97超碰国产亚洲精品资源| 亚洲永久永久永久永久一级一级一级精品 | 国产精品成人在线| 人人摸人人干| 老司机福利社视频在线观看| 成人羞羞视频国产| 精品高清一区二区三区三州| 日日爽夜夜爽| 女人综合网| 国产Aα| 婷婷国产精品九区| 欧美亚洲首页| 尤物一级在线免费观看| 嗯嗯啊啊好疼| www.亚洲黄色| 香一区二区三区| 国产中文大片资源中文字幕 | 秋霞免费AV| 婷婷成人久久久精品| 夜夜爽夜夜操| 91欧美偷拍| 18禁免费视频| 日本少妇va7777| 大黄片做爱的大的| 欧美东京热青青草| 美腿丝袜偷拍亚洲欧美| 亚洲αv一区二区三区| 韩日欧亚a级| 久久国产精品91| 亚洲成人性| 亚州Av天美传媒| 日韩午夜精品一区二区三区电影| 女人香蕉久久毛毛片精品| 九月AV| 亚洲精品日韩国产欧美| 男女性无套 免费九一| 操死我了啊啊啊| 高清不卡一二三区视频......| 国产9l 大屁股| 国产精品网站www| 日日夜夜狠狠| 国产欧洲精品亚洲午夜拍精品| 亚洲AV成人无码一二三久久 | 国产色综合亚洲色综合吹潮| 91天堂丝袜美腿| 亚洲色欲天天人妻无码系列专区| 成人影 天天操 亚洲| 一牛影视久久久一区二区三区| 人人澡人人爽人人精品| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 色在线视频导航| 亚洲成aⅴ人片不卡无码| 超碰成人国产| 精品一区二区三区四区外站| 国产精品懂色tv影视免费观看 | 婷婷亚洲天堂| 日韩 女同 综合| 亚洲无码电影久久久| 亚洲av性爱电影| 日本人妻一区二区| 久久东京热久久| 久久大香蕉| 国产精品色| 大香网站| 亚洲欧洲激情卡通另类文学四射小说网站| 少妇综合网| 啪一啪免费视频| 韩国女主播青草福利视频| 青青草自拍视频在线播放| 亚洲中文sv| 国产大学生高潮在线播放| 久久久久亚洲一区女同性恋中文字幕| 久久精品国产AV一区二区三区| 蜜臀AV成人精品蜜臀AV久久| 插入逼91| AV色五月天| 色综合久| 嫩呦国产一区二区三区AV| 亚洲欧美setu| 国产亚洲精品美女久久久久久2021| SUV一区二区在线看| 青春草莓视频在线观看网址| 91黑丝操| 四虎免费看黄| 极品销魂美女一区二区 | 亚洲福利中文字幕在线| 国产精品成人AV片免费看网站| 日日噜噜夜夜久久亚洲一区二区 | 超碰九区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 91黄站| 丁香六月天| 12一15性XXXX粉嫩国产| 久久视频,这里只有精品 | 人妻熟女av国产网站| 激情在线青青操| 97午夜剧场日韩| 亚洲AV无码AV吞精久久久久| 综合久久99| 欧美亚洲宗合色性图| 婷婷五月综合在线| 少妇高潮特黄A片| 97天天日| 狠狠色五月亚洲91| 春色综合免费| 骚日日av| 久久宗合亚洲| 国产欧美成人精品| 96精品久久久久中文字幕| 国产精品亚洲四五区在线观看| 欧美一级A片在线看视频性色| 影音先锋少妇| 东京热男人天堂| 九九自拍伦理| 亚洲精品骚逼| 色色99| 精品熟女一区=区三区| 国产色呦呦| 五月天综合在线| 色婷久久| 久/久精品99看9| 啪啪啪精品视频| 妇女一区二区三区| 国产精品久久久久婷婷二区次| 国内精品久久人妻性色av| 日韩免费一级性爱视频| 中文字幕精品一区欧美| 夜草网站| 超碰色男人操熟女| 狠狠操夜夜操蜜桃视频三区| 色噜噜狠狠色综合日日| 99www.bibizy香蕉资源国产一区二区三区高清 | 日本久久综合| 婷婷超| 极品欧美一区二区三区| 丁香婷婷五月| 日本一区二区不卡精品| 天天综合网~69| 久草精品国产蜜臀| 综合色一区三区二区| 青青操在线亚洲视频观看欧美在线 | 国产精品白领在线观看 | 91视频精品| 亚洲日韩美女中文字幕乱| 丁香六月激情| 91成人无码| 亚洲 欧美 手机在线观看| 色婷婷综合网站| 自拍丝袜美腿人妻| 五月天久久婷婷亚洲| 农村少妇久久久久久久| 日本操嫩b网| 丝袜视频一区二区在线播放国产中文 | 超碰在线日韩一区| 国产无码精品成人| 丰满翘臀美女影院视频| 青草精品视频-日本久久久久网站| 日日摸夜夜夜夜爽| 欲香欲色天天天综合和网| 啪啪视频亚洲第一| 欧美999999| 收看日本人日bb| 国产精品网站www| 最近2018中文字幕在线高清第一页| 天天综合精品| 日本影视久久免费| 韩日精品福利视频一区不卡在线免| 亚洲男人天堂2017| 美日韩成人| 91国产丝袜白虎| 中日韩免费看男女操逼大全| 国产黄a三级三级三级av在线看| 四虎在线视频| 久久精品亚洲婷婷| 日韩成年人性爱视频| 天天综合网国产| 91人精品妻入口| 成人五月天色网| 蜜乳AV免费观看| 精品人妻二区三区| 激情国产乱伦Av| AV男人天堂网| 亚洲中文字幕97久久精品少妇| 国产精品久久久吖| 欧美色网络| 宅男91视频在线播放| 欧美激情一区| 亚洲91亚洲| 久久一区二区三区四区五区| 亚洲男人的天堂AV| 久久激情五月| 中文字幕精品日韩中文字幕| 亚洲成人贴图| 东北操逼| 大香蕉在线免| 日韩美脚一区二区网站| 97任你吞精| 激情五月天中文字幕色| 色香综合天天影视综合| 日日夜夜模| 久久这里都是精品| 最新国产精品久久精品| 搡老女人老熟女91| 超碰诱惑| 亚洲精品久久久久久| 97色爱| 99久久com免费视频′| 五月丁香综合激情| 激情开心五月天| 老熟女乱子伦中文字幕一区二区| dy888午夜老子影视达达兔| 97K超碰在线| 欧美第五页| 97视频在线视频| 91强在线播放| 超碰综合97在线| 中文字幕1区2区| 欧美色综合网| 亚洲欧洲无码bt精品合集| 高清无码学生妹高潮| 天美一区在线| 欧美特黄视频网站| 日本免费二区三区| 丝袜美腿丝袜| 欧美激色| 超碰诱惑| J?P?NESEHD熟女熟妇伦| 日本韩高清无砖码22o| 日本人妻最新在线中| 内射老妇BBWX0C0CK| 国产成人手机视频激情| 亚洲天堂无码| 欧美 亚洲 综合 制服| 亚洲第91页| 九七毛片九九毛片| 久9爱精品| 公司1区2区3区精产精| 久久噜| 久久天堂网| 亚洲欧美97| 黄色视频高清无码网站| 人人潮人人摸| 欧美大码在线视频| 天天综合站| 国产 日韩 欧美一区| www…国产操逼| sss视频华人在线| 丝袜美腿91| 人人操我人人干| 精品久久久九九九孕妇| 中文字幕乱妇免费视频| 中文字幕乱码人妻二区三区| 五月色综合| 强奸熟女一区二区三区 | 亚洲超碰在线| 中文熟女五十乱码在线| 国产区性爱在线视频秋霞豆| 久久夜色一区二区| 青青草国产欧美非洲黑人| 99热精品在线播放| 欧美十八禁导航成人| 男人干美女| 91伊人久久在线| 激情抓乳插进去啪啪啪日韩 | 色欲三区| 久神马| 亚洲国产精品无码AV在线| 中文字幕啊啊啊在线观看视频| 精品亚洲天堂| 欧美另类自拍 | 日韩性爱啪啪视频| Julia Annxxxxx| 91精品老女人| 极品后入免费视频| 天美传媒AV在线播放| 午夜福利1区2区3区| 免费毛片在线播放| 日韩视频小说在线观看 | 不卡在线观看视频| 日韩一区二区三区四区五区| 人妻黑丝袜电影| 一级AV性爱| 日本不卡三级网在线播放| 久草看看看| 在线无码网站| 精品然女一区二区| 国产精品久久久久久久AV大片 | 亚洲欧洲无码一区夜| 91碰超| 97操在线| 欧美日韩一区二区三区四区蜜桃| 一直超碰| 91人妻尻屄视频| 欧美精品不卡一二三四在线91| 人人干人人操人人爱| 精品女人999| 东北女人高潮视频| 99.色网| 国产AAAAAABBBBB| 夜夜高潮夜夜爽| 欧美精品日韩久久久九| 欧美爱国产综合、| AA丁香综合激情| 免费AV中文网在线观看| 亚洲男人的天堂网| 囯产操逼片| 欧美亚洲自拍另类人妻| 岛国999| 亚洲精品日韩国产欧美| 成人AV在线网站| AA丁香综合激情| www.男人的天堂| 久久久久亚洲精品| 国内亚洲精彩视频在线| 亚洲丝袜综合| 亚洲欧洲色情高清| 免费黄色片子| 国产精品黄色三级av| 亚洲天堂男人的天堂| 久久久成人精品| av天堂影视中文在字幕在线中文| 欧美极度丰满熟妇hd| v91av| 亚州国产成人精品女人久久| 防屏蔽在线视频| 天天干天天燥| 综合久久少妇中文字幕| 偷窥自拍亚洲| 夜夜综合| 96国产污污污丝袜| 91在线色| 亚洲精品一二三四区| 曰韩欧美国产传媒麻豆第一区| 一区二区娱乐网站| 99久久婷婷国产综合| 在线欧美69V免费观看视频| 久久久久久久久一区二区三区| 成人综合网 欧美| 人妻激情偷乱视频一区二区三区| www色色com| 福利操逼| 国产在线激情视频| 国产在线视频二区| 国产一区二区三三视频| 国产三级资源在线观看| 神马久久久久久伦理片| 人人操人人摸人| 美女黄频a美女大全免费皮| 日韩av不卡在线观看| 被男人添B超爽视频| 色妇综合网| 亚洲一区二区在线观看91| 美女91| 2024年最新色情网站在线观看 | 男女日B国产| α√在线| 欧洲色| 偷拍欧美综合| 老熟女区| 蜜桃午夜视频一区二区| 熟妇色99| 超碰人人操97碰| 国内毛片国产专区二| 91久久久久久| 综合网欧| 17c嫩草51久久91嫩草| 黄色片一区二区三区四区五区 | 亚洲自拍欧美色综合| 丰满人妻一区二区三区免费| 亚洲密乳AV| 免费观看欧美日韩操逼视频| 国产 大胆 对白| 国产suv精品一区二区四| 狠狠躁天天躁日日躁| 婷婷性网| 国产午夜无码片在线观看影视| 天天弄天天操| 97亚洲欧美日韩| 欧美天天综合网| 天堂中文资源在线bt| 色99在线| 超碰97亚洲| 婷婷成人五月天| 亚州性色| 久久精品人体AV| 亚洲青色欧美| 亚洲精品九九九| 凹凸视频特色日本特黄| 色欲人妻一区二区在线| 午夜性生活av免费在线看| www99热| 日本天天干天天日一区| 久久久久久精品免费看A级| 日本999精品视频| 黄色大片视频在线免费看| 日本99视频| 久啪视频| 九九综合| 亚洲 暴爽 AV人人爽日日碰| 91色艳| 少妇厨房愉情理伦片bd在线观看| 欧美综合骚| 人人操人人色网| 丁香五月激情综合| 东京热双插| 精品国产乱码久久久久A| 日本媚薬中文字幕在线| 色五月第四色| ?亚洲伊人伊成久久人综合网| 老熟妇91| 久久精品国产精品| 五月丁香| 久久精品欧美一区二区三区不卡| 亚洲日韩av一区二区三区百合| 亚洲成人在线高清| 天天影视综合色| 色五月av| 精品伊人久久久大香线蕉小说| 青青草在线视频播放器| 婷婷香网站| 亚洲欧美一区二区三区在钱蜜桃 | 超碰在线欧美性爱激情| 国产丁香精品露脸视频| 亚洲国成人情色好看电影| 国产特级毛片AAAAAA高潮流水| 春色91| 欧美综合传媒| 国产老熟女| 少妇xx精品| 精品久9| 青青草导航在线视频| 91最新综合| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | AV老汉| 亚洲国产一区二区三区四区国产| 无码高清少妇久久| 91丝袜视频在线观看| 色香网| 久操| 9精品久久| 二三四区精品| 五月天久久婷婷亚洲| 欧插网站| 99热综合| 久久久久国产一区二| 久操com| 中文色综合| 日韩Va亚洲va欧美Ⅴa久久| 成人无遮挡毛片免费看| 极品欧美一区二区三区| 午夜偷拍久久熟女| 中文字幕av乱伦| 中文字幕在线观看永久| 操东北女人| 久久αⅴ| 思思热国产高清| a片在线播放| 国产家庭乱伦性爱视频| 亚洲免费在线探花| 天天视频黄网站| 伊人久久久日韩一区| 日韩二三区| 久久久久9999精品九九九| 欧洲站一级二级三级h| 97天天日| 被体育老师抱着c到高潮| 日韩三级视频一区二区三区| 欧插网站| 午夜后入| 色天天野狼综合社区| 欧美丝袜91| 亚洲精品国产无码高清| 2018色综合天天操| 国产夜夜操| 伊色久人大在线| 老子午夜伦不卡影院| 亚洲最大AV网| 在线观看一卡二卡| 五十路人妻在线| 精品人妻一区二区三区日产| 91c色| 91女网站| 麻豆视频一区二区| 亚洲 一区二区 自拍| 后入美女国产| 欧美精品庄| 一级久久久久久久久久久 | 色妇91| 亚洲图片激情小说| 免费看A片毛毛片在线播| 色五月综合| 精品无码一区二区人妻久久蜜桃| 久久久精品网站| 亚洲无码99| 青青草中出视频| 新版天堂中文资源8在线| 加勒比海成人视频网| 91美女视频直播| 黄色人人| 熟妇视频一区二区三区在线观看| 欧美天天| 中出789在线视频| a男人的天堂久久一级A毛片| 激情小说五月天| 久久久新亚洲AV| 91Chinese在线| 国产9熟妇视频网站| 亚洲夜夜欢无码一区二区 | 日本黄色精品| 九九视品黄色| 日本乱人伦片中文三区| 加勒比av中文| 日本99热| 色激情综合网站| 欧美日韩国产中文精品字幕自在自线,| 午夜经典| 美骚妇av高清在线| 久久婷五月天| 日韩免费看在线黄色片| 男人天堂久久日韩| 黑人无码一区二区| 亚洲综合色图欧美| 日本不卡三级网在线播放| 日本成a人v网站在线观看| 亚洲熟女一区| 天天影视综合网欧美精品| 久久久久久人妻一区精品色欧美| 91四海无码日韩欧美| 婷婷五月天成人| 欧美亚洲综合高清在线| 91亚洲欧美色图| 熟女色综合久久| 丰满人妻一区二区三区免费 | 国产一区二区a毛片| 亚洲欧美清纯| 久久久久久久久久久精| 国产精品一二三区福利| 91情色在线| 亚洲青色欧美| 超碰av人人人| 51一区二区三区| 免费αV在线视频| 加勒比无码毛片| 国产人妻一区二区三区欧美毛片| 天天色悠悠激情| 欧美综合站| 夜夜草网站| 亚洲欧洲日韩天堂av| Aa东京男人的天堂| 熟女中出视频| 精彩视频日韩| 91在线|亚| 欧美日韩国产在线| 四虎AV在线观看| www.婷婷五月天| 十八禁的黄污污免费网站| 91色交| 操b网站亚洲无码| 综合激情五月天| 天天操天天插| hd成人一区二区在线| 久操网线| 欧美亚洲日本视频久久久 | 影音先锋日本乱伦| 伊人久久综合影院| 亚洲最大AV网| 牛牛aV| 日本在线一二| 国产极品久久久| 亚洲色图加勒比| 激情婷婷黑人91| 9久久久久久| 欲色综合| 操高情无码| 亚洲性爱高潮影院| 欧美韩日精品资源| 婷婷人妻激情| 亚洲中文字幕熟女| 国产美女裸体秘 永久无遮挡| 日韩性爱1级片视频| 欧美日韩国产色图在线| 熟妇熟女一区二三区| 日本国产二线女色| 亚洲欧美色图| 亚洲精品官网在线观看| 五月婷色| 久久熟女久| 夜夜躁狠狠躁日日躁av| 人人操人人大香蕉| 厕所偷拍在线| 熟女久久久| 2017人人操,人人摸| 人人妻人人操人人乐| 人妻蜜桃臀| 亚洲天堂人妻熟妇视频| 国产超碰国产97| 国产欧洲精品亚洲午夜拍精品| 人人性爱视频免费| 国产精品色色| 综合亚州欧美| 国产女生在线| 91真人天天在线| 老熟妇乱轮| xxx亚洲午夜天堂| 亚洲图片欧美色图| 麻豆久久久久久久久丝袜 | 99热导航| 在线观看免费视频国产| 日韩精品9区| 久久久久久精品免费看A级| oumeizonghese,www| 国产操逼网站亚洲一级黄色| 日韩精品区二区三区不卡| 九九九不卡| 国产精品老熟女一区二区| 天天噜| 日本99一区二区| av毛片aaaaa免费看| 天天干天天日天天射黄色大片 | 岛国AV一区二区电影| 91日韩| 综合久久99| 亚洲欧美日韩免费观看| 亚洲欧美天堂在线| 色婷婷视频| 中文字幕av片| 骚逼高潮久久精品| 国产精品 久久久精品一牛| 国产99999久久精品| 男人的天堂2010| 欧美日韩免费性爱| 欧美日韩妖精91com| 精品人妻美妇91job| 91综合网在线| 欧美色图片91| 欧美日韩操逼嗦吊| 插入逼91| 久久国模av| 久久思思热| 日韩日本欧美在线观看| 肉丝无码中文高清| 99re9这里只有精品| 99久久婷婷国产综合| 日韩99精品视频综合区| 干少妇视频| 91欧美少妇| 伊人成人情色综合| 色色激情五月天| 亚洲免费成人在线高清无码视频 | 婷婷中文网| 乱伦日本中文自拍| 男人天堂2019| 亚洲一二三四区在线免费看视频| 欧美亚洲尤物久久| 欧美日产国产在线成人第一区| 中国熟妇| 人妻少妇精品无码专区二区密桃| 91 丝袜在线| 按摩中文字幕| 成人日韩欧美| 日本人妻A片成人免费看片| 久久成人午夜精品影院 | 欧美高清在线| 青青草手机在线免费观看| 又黄又爽在线观看视频| 亚洲精品乱码久久久久久蜜桃麻豆| 人人摸人人摸人人干| 不卡啪啪视频| 97综合在线观看| 99re3这里只有精品| 啊啊啊啊啊在线视频| 国产乱子伦一区二区三区免看| 亚洲色图8| 97超碰香蕉| aV中文麻| 亚欧免费观看视频| 天堂中文资源在线bt| 在线播放中文字幕| 亚洲瓯美色图| 亚洲另类色图片| 久久久久久久久久久999| 国产成人+综合亚洲+天堂| 久久侵犯人妻爽爽爽| 国产精品乱码久久久久久久久久久久| 色月天AV导航| 色www精品视频在线观看| 九九九九精品一区| 精品视频一二三中文| 国产偷人伦激情在线观看| 免费伦费视频在线观看| 国产亚洲中文不卡二区| 色色五月丁香| 激情综合五月婷婷| 天天内射| 亚洲天堂男人天堂| hd成人一区二区在线| 操狠狠| 超碰 另类 欧美| 少妇丝袜在线观看AV| 天天操熟妇| 91社区伊人| 熟女五十路一区二区三| 青青草吊丝| 又黄又硬又粗又长国产视频| 日韩欧无码一区二区三区免费不卡 | 人妻少妇久久中文| 国产在线综合福利网站| 加勒比大香蕉视频在线| 九九国产| 三级色综合| 国产黄a三级三级三级av在线看| 亚洲图片 激情小说| 欧美v亚洲v综合v国产v妖精| 欧美久热| 老熟女天天操| 国产又粗又长又爽又色| 青青草色插素人| 8x福利精品第一福利视频导航| 日本黄 R色 成 人网站| 色色97爱| 猛交交| 欧美18 在线观看| 嗯~啊~快点 死我视频| 最新亚洲黄色免费电影| 超碰97资源大奶| 中欧人妻丝袜中文字幕| 久久久影院| 一级人妻性爱视频| 亚洲自拍欧美色综合| 风流老熟女一区二区三区l| 免费97视频| 五月婷婷性爱| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | A V少妇特黄三级| 天天看夜夜看日日干| 亚洲午夜免费狠狠干| 最近2018中文字幕在线高清第一页| 一起草AV| 欧美日韩性爱电影在线| 精品国产乱码久久久兰草影视| 精品国产一级久久| 97色亚洲| 欧美A√综合网| 亚洲最新中文字幕免费| 欧美精品激情| 欧美熟妇视频| 国产精品一区二区 尿失禁| 国产自偷| 性爱AV天堂| 人妻啊啊人妻啊啊| 欧亚性爱啪啪| 浓厚中出中文字幕在线| 亚洲色图综合| 嗯嗯啊啊亚欧精品| 婷婷五月综合在线| 多毛小伙内射老太婆| 国产午夜在线观看| 少妇精品| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 亚洲污污网站| 天天日日夜夜| 日韩性爱电影一区| 2019精品国产无码成人| 伊人宅男大香蕉 | 91色交| 欧美天堂第二区| 99久久无色码| 色蜜AV| 巨爆乳一区二区爆乳区| 大茄子熟女AV导航| 久久女女| av天堂加勒比| 麻豆区久久久久亚| 97超碰超欧美。| 综合一区二区影视| 免费农村成人少妇人妻Aa一区二区视频 | 天天插夜夜操| 亚洲人妻在线一区| 久久美女国产| 91free福利| 屌逼传媒| 97视频620| 屁股久久久久久久久| 亚州日韩97| 久久精品72| 久久久天美| 91亚洲色图| 老司机深夜18禁污污网站| 99性爱在线观看| 91超级碰| 操逼999| 一卡二卡三卡| 黄色片A级一区二区三区| 另类 日韩 熟女| 国产怡红院| 国产夫妻性生活视频| 亚洲国产一级黄色视频| 无码乱人伦中文视频| 九久久九精品视频| 久久久91福利姬| 日本加勒比无码专区一二三| 夫妻天天操岛国视频| 国产精品一区av在线| 婷婷五月天补不补| 九草九九九| 岛国免费黄色网址| 69超碰综合| 97久久久久| 久久一区二区三区入口| 久久神马影院| 黑人免费福利视频| 久久久九97| 九九九九九用不成了| 99精品热| 久久久神马影院| 操逼国产免费| wwwss在线观看| 欧美爱国产综合、| 人人干人人操人人..com| 天天看综合网| 超碰地址久久| 大香蕉亚洲中文| 风韵犹存大大大大香蕉| 家庭乱伦网站国产| 超碰久久精品| 91熟女丨91老女人| 天天干美少妇一区| juliaann欧美丝袜办公室| av大香蕉| 欧美日韩中文视频播放| 久久天堂婷婷网| 蜜臀久久99精品久久久| 高树玛利亚无码流出| 蜜臀中文字幕| 黄页大片在线观看| 五十路熟女,国产欧美精品区一区二区三区| 精品毛片av一区二区| 亚州Av天美传媒| 久久免费9| 久久色激情一区二区三区| 亚洲资源站| 日日日日做夜夜夜夜无码| 五月婷婷基地| 啊啊啊不要好爽日韩无码一区| 欧美性91| 九九久久精品| 欧美视频中文字幕区| 91日日| 亚州熟女乱伦| 天天肏美女| 1769成人国产精品视频| 国产理论视频在线播放| 亚洲自拍欧美国产首页网曝| 性爱视频啪啪啪啪| 精品国产a∨一区天美传媒| 9色国产精品一区粉嫩| 性爱久久| 日韩性色| 91成人久久| 另类天堂| 91真人天天在线| 天天操夜夜操狠很操| 国产丁香精品露脸视频| 日本东京热大香蕉a片| 嗯啊不要在线观看嗯啊| 久久久久国产精品喷潮免费观看臀 | 国产人妻精品久久久一区二区三区| 人人摸人人添人人操| 亚洲欧美另类激情小说| 97超碰精品图片| 精品人妻一区二区三区-国产| 少妇综合网| 亚洲吊色| 97伪v| 亚洲色图综合网| 麻豆精品三区视频| 亚洲色情在线影视| 天天日熟妇| 肥佬影院91| 96久久久精品| 国产乱弄免费在线视频。| 国产精品久久久蜜臀| 亚州色图第三区| 校园春色综合| 亚洲有薄码区日本系列中文字幕| 色情综合网| 99re国产中文字幕| 六六久久日韩不卡| 亚洲一区二区三区久久 亚洲一区二区| 手机看av网站在线看| 99热这里只有精品地址| 99久久婷婷| 北京专精特新企业招聘信息| 日本超碰在线国产一区| 香一区二区三区| 欧美韩国你懂得在线| m欧洲一级午老|