日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满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
返回資訊列表
8050无码八戒| 农村妇女一级二级三级视频| 白嫩91在线亚洲| 懂色AV一区二区三区| 日本操逼视频免费| 九九九九九九免费视频| 好淫网一二三视区| 黄片免费久久久久久久| 日韩综合无码一区久久92| 99精品丰满人妻无码| 婷婷五月天激情网| 日韩国产不卡在线视频| 无码高清国产AV| 精品人妻一区二区蜜桃视频| www.高清无码诱惑一区.com | 99re在线| 欧美图片校园春色| 天堂涩涩| 亚洲视频二区| 亚洲欧洲无码一区夜| 99色视频| 95人妻爽爽人人做人人澡| 人人操人人操人人人操| 欧美特大AA级黄片| 精品无码一区二区三区色欲| 欧美国产精品| 中文乱码字幕观看视频| 日韩久射综合| 国产精品另类一区大香蕉| 少妇与黑人高潮在线| 国内毛片婷婷六月色| 亚洲精品一区二区日本| 久久欧美激情| 一级AAA片一区二区三区| 中文字幕超碰CAO| 亚洲精品丝袜| 青青国产精品在线| 欧美人妻中出| 97亚洲资源| 欧美另类色| 亚洲日本加勒比在线| 亚洲午夜福利视频| 一级片在线观看高清无码| 亚洲 无码 偷拍| 中文字幕三四区| 密臀在线视频| 岛国爱情动作片在国产AV无码专区亚洲AV漫画| 猛猛干| julia ann久久| 熟女天天干| 欧美色图 人妻| 熟女一区二区三区| 偷拍新久久| 啊啊啊啊啊啊啊啊啊在线观看| 天天干人妻| 啊啊啊好大好湿| 97超级欧美| 国产情色第一第二页在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 精品97精品97| 精彩久久中文| 亚洲中文字幕熟女| 国产精品露脸在线观看| 国产亚洲欧美每日在线| 免费精品人妻一区二区三| 午夜福利国产欧美日韩夜夜| 成人网站 免费观看| 亚洲婷婷五月天| 日本人体九九九九九九| 欧美高清18A片| a级免费在线观看| 呦呦影院| 日逼国产| 99.色网| 欧美色天堂网在线视频| 亚洲Av诱惑| 成人午夜高潮av猛片| 日韩综合成人免费视频| 日本欧美亚洲高清在线看| 9 9精品一区二区三区| 九九久久首页| 久操av在线| 婷婷精品久久av影视| 亚洲图片欧美色图| 丝袜熟女一区二区三区| 日韩美一区| 99黄页网站| 大香蕉日韩| 国产精品爆乳懂色蜜乳| 99热免费| 成人久久精品| 宅男影院久久久,99| 国产女性无套 免费观看| 日本天天色| 色综合美国| 五月天人妻综合| 青娱乐淫乱1314| 亚洲精品官网在线观看| 99超级碰免费视频| 都市激情人妻一区二区青青操视频| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 精品一区二区人妖| 使劲用力艹少妇视频一区二区| 午夜福利 成人 91| 操婷婷逼| 亚洲中亚日激情视频| 黄片www视频免费| 自拍大香蕉乱插| 伊人国产视频| 精品人妻视频入口| 夜夜中出国产| 啊啊啊水好多| 操逼网站地址| 怡红院亚洲怡春院av| 亚洲情欲| 亚洲宗合电影| A一区片| 裸体美女免费看网站青草| 色综合20p| 日韩操逼性鲍| 欧美日韩大陆黑人少妇99| 97超碰色情| 五月婷婷激情网| 精品乱码在线观看| 欧美午夜一区二区三区| 激情黄色五月天| 多毛小伙内射老太婆| 日韩欧美丝袜诱惑| 无码免费在线观看黄色片| 嗯啊不要在线| 蜜桃av色偷偷av老熟女| 人妻一区二区三区| 6080yy午夜理论三级一区二区三区无码| 欧美亚洲厕所精品偷拍91| 成人怡红院| 亚洲精品819| 日韩精品午夜操呦呦不卡影院| 91c色| av麻豆啪啪| 婷婷中文字幕| 中文字幕在线免费观看 | 91久精品| 日韩人妻 中文字幕| 操操操操操操| 香蕉久久AⅤ...| 久久动漫精品视频这里只有精品| 91中文在线| 欧美高清16| 韩国久久97| 日日夜夜精品视频| 人人爽夜夜玩视频| 99在线精品观看99| 不卡av免费在线网址| 区日韩亚洲乱码av电影| 亚洲熟女性高潮久久久| 亚洲熟女一区二区| 久久精品亚洲婷婷| 一级黄色性爱A级片| 色综合 加勒比| 欧美性爱精品一区二区| 国产精品一区二区a| 美女自卫慰黄网站免费| 51国产午夜精品视频| 美女裸体麻豆天美蜜桃91| 黑人白女精品一区| 日韩欧美三级| 97干天天| 天美av在线观看| 欧美偷拍区| 精品白丝一区| AV一二区| 亚洲九月丁香| 国产欧美日韩精品中文| 97欧美精品| 性老妇一区二区三区| 黄片免费久久久久久久| 蜜臀中文字幕| 超碰久久.com| 精品少妇人妻| 午夜免费视频1000| 丁香色五月 97干| 综合激情97 | 亚洲成人一二三区| 九九九九免费高| 一区二区三区在线资源| 日日操丁香五月天| 91综合色| 東南亚性呦成人伦理资源在线视频| 精产国品一区二三产品| 视频二区美腿丝袜制服人妻欧美| 亚洲色图尤物视频| 97免费视频在线| 人人澡人人弄| 午夜精品久久久久| 午夜精品久久久久久久男人的天堂 | 韩国成人精品久久久免费看| 91精片| 欧美色图片欧美色图| 1区2区3区在线视频| 五月婷婷爱六月丁香色| 不卡av在线中文字幕| 亚洲a色| 人妻 欧美亚洲| 东京成人一区| 国产高清不卡视频| 加勒比av中文| 日韩精品99久久久久久中文字幕| 国产精品乱码久久久久久久久久久久| 五月天开心网| 久久啊哟| 超碰超碰95| 丁香五月激情网| 国产激情av女片自拍| 操婢日韩| 国内亚洲精彩视频在线| 一区操逼日比视频| 日本三级R| 亚洲人妻在线一区| 亚洲精品人体| 麻豆国产97在线| 日日夜夜精品视频| 欧美一区二区男人天堂| 久久精品国产亚洲AV无码做| 日本性爰一道本| 欧美人与动性人交a| 综合久久9| 亚洲欧美内射| 香蕉99秘 一区精品蜜桃臀| 日本道人妻久久久在线不卡色视频| 亚洲男人天堂2016| 日本不卡三级网在线播放| 超碰国产情侣自拍网| 欧美精品另类人妖xxxx| 大香蕉伊人亚洲| 色色色综合网| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 天天插天天插| 91亚·色| 操老熟女AV| 中文字幕二区| 青青草中出视频 | 深夜视频| 玖玖爱在线视频免费观看| 国产精品日本无码A片| 亚洲天堂中文字| 国产精品激情久久久久久久| 欧美一级A片在线看视频性色| 熟女突然公开看18禁影片| 伊色综合天堂色97| 麻豆精品三区视频| 色97欧美| 久9九综合在线| 中文字幕一区二区三区四区在线视频| 国产精品久久久久久久毛片1| 日韩av不卡在线观看| 国产高清在线观看欧美| 91超级碰碰碰| 亚洲一区二区 麻豆传媒| 日本中文字幕一区| 友优传媒精品在线一区二区| 日韩一级性爱无码| 久久久九九网站| 精品国产少妇高潮视频| 后入式福利| av三级电影在线播放| 日韩综合无码色欲vv| 在线观看黄色电话| 人妻熟女一区二区| 日本操逼视频免费| 亚洲二区精品在线观看| 91色图片| 亚洲国产成人精品女人久久久| 久久久久久久久久va| 8050午夜少妇无码| 久久97资源 网| 天天干人人乐| 免费a在线播放v| 少妇诱惑视频| 亚洲美女高潮喷水视频| 日日碰狠狠添天天爽超| 国产传媒日本欧美专区| 国产AV中文| 岛国片国产成人亚洲播放| 久艹伊人精品综合在线| 91黄站| 岛国片国产成人亚洲播放| 嗯嗯啊啊视频在线看| 91精品国| 日韩一级特黄av毛片| 超碰超碰欧美| 国产97免费视频| 97色在线| 欧美熟妇精品黑人巨大91| 操逼视频免费日韩无码| 成人一区二区三区四区| 日韩中文字幕视频| 中日无幕一二三四区| 丝袜美腿91| 国产成人亚洲精品无码古代早漏男| 日韩AV色图| 激情小说在线视频| 大香蕉伊利av| 青青草福利视频| 99色视频| 少妇综合网| 久久乐| AV色五月天| 思思热免费在线视频| 亚洲情色图片区| 狠狠色伊人亚洲综合网站色| 国产五码丝袜屁眼| 久久99亚洲精品久久99果| 在线电影亚洲色图| 91狼人| 亚洲中文字幕av | 天堂伊人久久| 91麻豆va国产精品| 人妻娇喘 激情视频| 亚洲一本大道中文字幕无码在线| n1038 一二三区| 在线岛国新天堂8| 亚洲熟女综合| 久久黄色性爱视频| 日本中文字幕一区| 91狠狠综合久久久久久| 亚洲无码精品AV久久久| 久久只有精品一区二区三区| 91肉丝| 日本少妇va7777| 亚洲熟女av中文字幕| 99热97| 欧美黄色片在线播放| 国产免费一区| 91色艳| 亚洲国产精品成人综合| 偷拍片久久| 黄片不用下载在线观看| WWW.操逼.COM| 日日摸日日碰| 爱射综合| 日韩性爱毛片操骚逼| 天天综合91入口| 视频二区美腿丝袜制服人妻欧美 | 国语精品内射在线观看| 国产乱子伦久久精品综合一区二区三| 青青草色插素人| 美女被艹尤物视频| 九九九九热| 美女让帅哥通她小鸡鸡| 天天日少妇逼AV| 操啊国产| 99久在线精品99re8| 黄色小说亚洲| 日韩人妻一区二区精品| 日韩精品在线视频,日韩精品……| 九九热精品视频在线观看| 91搞逼视频| 久久线上视频免费看| 色眯眯射| 亚洲欧美精品一区天堂久久| 高清无码 国产精品| 亚洲久久久| 啊啊啊啊啊在线观看网址 | 久热精品在线| 色大香蕉97N| 嗯嗯嗯好爽| 四虎午夜影院| 超清中文乱码字幕| 色色97爱| 亚洲色图欧美色图制服诱惑| 日本丝袜美腿人妻九九| 日日夜夜狠狠| 激情五月丁香五月| 国语对白在线播放视频| 2019精品国产无码成人| 亚洲 欧美 日韩另类 麻豆| 久久免费看高潮毛片韩国| 狠狠色婷婷7777久| 欧美极品性爱天天射| 久久91| 亚洲AV在线资源| 亚洲欧美国产中文字幕| 75大香蕉| 精品久久久中文字幕不| 久久婷婷色综合一区二区三区| 国产高清吃奶免费视频网站| 午夜a成v人电影| 亚洲色图综合| 精品人妻一区二区三区在| 玖玖大干人妻| 欧洲精品一二三在线| 超碰538| 后入人妻一区| 天天天肏屄欧美| 精品无人区麻豆乱码久久久| 久久九九一区二区三区成人| 精品美女在线视频| 亚州综合图片| 欧美精品亚洲精品日韩传电影| 中文字幕人乱码中文字的预防方法| 少妇天堂网络| 欧美国产有色电影| 亚洲综合 欧美| 欧美草草| 欧美成97爱| 九九九九热| 亚洲AV成人精品网站在AV| 国产精品不卡高清在线观看| www熟女乱伦com| 亚洲色系另类精品国产| 性爱视频无打码在线观看| 91东京热男人的天堂| 五十路三区在线| 成人性爱免费播放| 亚洲第2页| 亚洲最大无码中文字幕网站| 日韩欧美女优电影| 色狠狠综合噜一二三区| 久久人妇| 亚洲视频精选| 凹凸视频在线观看伊人| 中文字幕在线日亚洲9| 99视频在线| 国产青视频| 天天日熟妇| 欧美色性情| 偷拍偷窥与盗摄视频专区| 国产高清成人mv在线观看| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | www.超碰| 精品十三区| 国产精品乱码久久久久久久久| 91观看 国产白丝| 99久久婷婷| 欧美国产日韩高清在线| 青青草原狼av| 乱操9999| 高精欧美色| 天天躁日日躁AAAAXXXX国产 | 亚洲日韩精品在线播放| 97久久免费| 国产乱码久久久| 亚洲 中文字幕 精品| 综合激情二| 午夜天堂精品久久久久91| 亚洲色图20p| 亚洲精品乱码久久久久久蜜桃麻豆| 国产免费小视频| 十八禁av无码免费网站APP| 一级A啪啪啪啪| 亚洲综合影视| 91色图| 国产精品免费美女视频| 媚薬在线视频麻豆| 欧美激情 亚洲色图| 久久av一级av少妇av高潮| 在线 制服丝袜中出 人妻| 国产精品丝袜久久亚洲不卡| 日本操逼视频不卡直接放| 一区二区三区视频| 亚洲资源网| 性夜影院爽黄A爽免费动漫| 97av在线视频| 亚洲综人| 强奸乱伦αv片| 男人下部插入女人下部| 富女玩鸭子一级毛片| 综合婷婷| 疯操AV| 人、人、摸,人、人、草| 久久成年精品| 精品成人无码| 亚州色图欧美| 91艹B视频| 日韩欧亚中文在线| 思思热在线cao| 日韩精品99久久久久久中文字幕| 亚洲人成网站7777| 亚洲第一页欧美| 人妻少妇久久中文字幕一区二区 麻豆 | 青青操综合网| 精吧天堂| 一区二区三区激情在线观看| 热热色国产一二区AV| 日韩精品中文字幕一| 国产美脚女优尤物在线观看| 男女啪啪啪18禁网站| 欧美人妻精品| 久久亚洲欧美中文字幕国语| 久久国产对白激情浪潮 | 欧美综合站| 久操免费观看| 亚洲另类久操网| 久久熟女嫩草成人片免费 | 欧美色图亚州激情| 日本操逼aaaaa| 玖玖爱一区在线| 国产精品女久久久久av爽| 亚洲成人妻日韩在线| 亚洲精品尤物yw在线影院| 啊啊啊久久久视频 | 一卡二卡在线播放| 亚洲情色第一页| 96精品久久久久久久久久| 婷婷六月色| 亚洲中字幕日本一区二区三区| 蜜臀网 一区| 97久精品| 亚洲精品精品一区二区| 欧亚日韩中文在线| 韩国三级三级BD在线| 色吧5亚洲| 中字一区| 91xingse| 久久精品国产亚洲AV片多多| 欧美亚洲图片| 超碰精品| 99精品在线播放| 成人性交免费视屏| 激情视频一二三| 婷婷综合网站| 欧 美 自 拍 偷 拍| av影院十区| 超碰色中文| 精品国产片亚洲一区| 加勒比无码毛片| 97青娱乐超碰久久| 国产亚州日韩欧美看片| 一级一性爱免费视频| 果冻传媒一区二区三区| 91精品电影18| 色婷婷丁香| 91久久久亚洲| 尤物AV免费网站| 天堂资源欧美| 天天干天天干天天| 亚洲精品啪视频| 日本久久女同性恋视频| 日本久久久精品电影| 91亚洲影院综合| 激情久久久| 很黄很色的视频在线观看| 伊人网高清| 尤物视频偷拍免费| 亚洲色性情三级| 午夜免费视频1000| 婷婷啪啪| 六十路日本| 精品高清一区二区三区三州| 日本人妻丰满熟妇久久久久久| 亚洲成人在线乱码色午夜| 日韩丝袜高跟制服在线观看| 91大神电影天堂| 国产一区96在线| 中文字幕性感少妇av| 午夜福利av电影在线| 午夜精品久久久| 欧美天天射| 久久香蕉国产线看观看亚洲女人 | 亚洲人在线成线成人| 99久久九九| 日欧操屄视频| 九九黄色视频在线观看| 亚洲国产精品成人无码久久久 | 神马久久久久眼| 97色婷| 中日韩欧美精品无码AⅤ一区二区| 四虎影视永久在线免费| 性色生活片久久毛片婬片免费放女人一级毛片| 色婷婷狠狠18禁| 少妇高潮对白在线观看| 凸凹视频在线观看| 99热这里只有精品地址| av天堂手机版追回| 久久xxxx| 青青操青娱乐| 岛国AV一区二区电影| 性色一线| 乱欲性色| 欧美亚洲色的图| 2020天天色综合| 久久久久99精品成人片蜜臀| 欧美劲爆第一页| 久操免费观看| 久草午夜| 国产东北女人在线视频| 91足交| 日本123区操B视频| 北京美女一区二区| 中文字幕av色| 激情婷婷五月天| 91小视频| 在线啊啊啊啊| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 人妻天堂综合网| 猛交交| 97一区二区蜜臀| 91爱做| 狠色婷婷久久一区二区三区_| 午夜福利在线合集| 秋霞福利网| 午夜αv| AV天堂国产| 中国女人内射6XXXXX| av日韩国产一区二区| 亚洲AV无码成人精品久久| 综合久| 国产视频一区二区在线| 久久香蕉网| 伊人991| 人人妻人人爽人人精品| 91福利网在线观看| 人妻一区二区三区视频| 亚洲图片偷拍视频区| 91亚洲黑人| 亚拍在线| 伊人影院日本| 久草大| 色91综合网| 亚洲精品 欧美97色色| 人妻干天天| 丰满人妻一区二区三区| 天天澡天天爽日日av| 欧美亚洲首页| 国产亚洲禁久一区二区| 二对二中文字幕。| 麻豆天美在线| 最新av中文字幕高清| 五月丁香色色网| 1024手机看片欧美日韩| 精品人妻一区二区三区在| 亚洲精品日日夜夜52| 免费人人搞97| 欧美日韩在线小说| www.久久久久| 天天综合欧美黑人| 欧美成人四级在线播放| 日韩美一区| A一级色女| 中文字幕奈奈美被公侵犯| 91色综| 中文字幕欧洲有码| 久久精品国产亚洲妲己影视| 人妻嗯啊啊在线播放| 97久久精品不卡| 岛国激情视频在线观看| 97超碰天天| a片自拍直播视频| 色婷婷五月天| 国语精品av| 久久五月综合| 另类专区加勒比| 99国产精品视频尤物| 91精品人妻一区二区三区蜜桃臀| 精品国产乱码久久久久久蜜臀| 91在线视频观看国产| 97超碰亚洲| 亚洲国产av中文字幕久久| 偷拍亚洲高清图片| 亚洲欧美色图片| 91逼逼女人91| 亚欧无码线免费观看视频| 日本有码影片下载| 日产欧美电影一区二区三区| 超碰在线974| 无码精品久久久久久亚洲| 超碰这里有精品| 国产尤物AV尤物在线观看不卡| www. 男人天堂成人在线| 国产精品亚洲高清在线| 欧美亚洲涩涩| 色欲久久综合| 久久青青草在线视频| 嗯嗯啊操我| 亚洲欧美日韩免费观看| 国产精品欧美激在线| 国产操逼逼网| 日韩欧视频| 爱射综合| 精品国产91av一区二区三区| 免费国产| 床上啊啊啊一区二区三区| 91 天天综合| 大屁股xxxxx| 91国模| 久久久久久久久久久久黄色 | 欧日韩不卡视.频| 美女天天干| 日韩视频小说在线观看 | 人妻少妇久久| 色婷婷影视| 国内毛片欧美香蕉精品| 亚洲日本天堂| 亚洲丝袜色| 精品国产乱码| 欧美性五月| 96精品在线| 国产一区二区三区久久久精品| 欧美传媒一区| 亚洲 日韩 欧美 国产综合体| 亚洲精品一二牛牛| 午夜精品人妻二区三区| AV九九| 国产乱伦亚洲| 国产精品扒开腿做爽爽爽视频| 久久超碰97中文字幕| 色色五月婷| 欧美探花网| 欧洲亚洲人妻无码久久三区四区| 五月天激情小说网| 天天操夜夜操狠很操| 97资源站国产精品| 久久一区,青青青青草视频在线播放| 人人看欧美性爱| 九月伊人中文字幕| 美熟女逼导航AV操逼| 亚洲欧洲小说图片视频| 新婚人妻扶着粗大强行坐下| 免费AV中文网在线观看| 91老妇女| 另类 综合 日韩 欧美 亚洲| 日韩三级视频一区二区三区| 香港澳门日本三级网站| 97亚洲自在精品在线观看| 精品国产一区二区三区久久久蜜臀 | 三级三级三级日本99| 欧美经典一区二区三区| 啊啊啊啊免费视频| 日本 情色 1区2区3区| 日本精品免费一区二区三区四区| 色色国产| 一区二区激情国产熟女| 日韩性爱再线视频| 超碰成人公开| 亚洲久久久久| 国产一区二区在线播放| 性生活性生大爱77AV国产| 97精品视频网站| 丁香五月天啪啪| 色五天伊人| 国产综合在线视频网站| 欧美性爱第1 页| 国产视频第二页| 国语精品av| 色噜噜人妻av中文字幕| 东方亚洲在线操逼天堂| 亚洲熟女国产综合另类| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 97色插| 亚洲综合小说另类图欧美视频激情小说色五月天| 久久久久久亚洲Av无码精| 色欧美亚洲| 超碰美国| 97这里只有精品| 人人模人人看| 五码视频在线观看| 51国产午夜精品视频| 12一15性XXXX粉嫩国产| www.久久制服糖| 成人av影院在线观看| 在线人成亚洲视频免费观看| 视频国产欧美在线播放| 免费?级毛片无码?∨蜜芽试看| 亚欧无码线免费观看视频| 日韩免费中文字幕视频| 欧美亚洲国产91在线| 在线观看高清AV| 亚洲精品无码成人久久久99| av午夜影院在线播放| 黄页视频网站野外| 天天插天天射| 五月天黄色av| 亚洲少妇在线影音| 欧美久久久15P| 韩国嫰模上门援交视频| 亚洲国产精品久久久久婷婷老年| 大香蕉日韩欧美| 加勒比综合a∨| 亚洲日韩电影| 92性色国产午夜福利在线661 | 激情综合婷婷| 999日韩中文精品观看视频。| 日日橹狠狠爱欧美超碰| 日韩资源网| 一本色道久久综合亚洲二区三区| 欧美亚洲丝袜人妻制服中文99| 狠狠操,使劲操| 国产精品呦一区二区三区| www成人啪啪18秘 免费| 天天插天天插| 青青伊人加勒比海| 亚洲色婷婷综合久久一区二区三区| 天天射夜夜骑| 在线观看一级α片刺激高潮视频| 人人干人人操人人..com| 大香蕉520| 嗯……啊…嗯嗯…啊…好舒服| 国产成人精品午夜福利| 99热在线播放| 天天操夜夜操狠很操| 免费观看啪视频| 91狠| 日韩欧美中文字亚洲慕| 亚洲欧美色图| 国产黄色av大片网站| 亚洲色图超碰在线| 亚洲日韩乱码中文无码蜜桃臀网站| 青青草公开在线免费不卡视频| 欧洲性爱无码区| JIZZJIZZ国产精品喷水| 综精品久久久aaaa| 久久女女| 97久久超碰| 久久久久久久久国产| 激情小说在线视频| 国产懂色精品国产av| 亚洲一区二区三区麻豆传媒| 狠狠躁天天躁日日躁97| 丰满美女一级毛片在线播放| 99自拍视频在线观看| 嗯嗯啊好大| 久久人妻| 狠狠色综合网| 欧美图片校园春色| 乳欲人妻办公室奶水| 丰满翘臀美女影院视频| 精品国产久久乱码| 国产美女裸体秘 永久无遮挡| 五月天色五月| 日韩av情韩国爱禁区av一区二区| 麻豆天美传媒毛片| 99精品视频在线观看| 怡红院亚洲怡春院av| 亚洲无无码αⅴ每日更新| 日韩乱伦视频| 一摸二插三插| 视频黄色国产一级| 区二区亚洲婷| 伊人91| 综合激情五月天| 人人摸人人舔一区二区| 青椒国产97在线熟女| 天天摸,夜夜摸| 亚洲熟妇A V黑人| 婷婷五月天激情网| 后入福利| 久热99| 97亚洲色图| 欧美 亚洲 偷拍自拍| 久草线上视频免费看| 中国国国产一级特黄毛片| 亚洲诱惑| 午夜电影在线观看无码专区| 91视频观看网站| 91网九色蝌蚪操熟女| 啊啊啊用力在线观看| 97色碰| 清清一区二区三区四区不卡视频| 大香蕉综合网| 久久久久成人蜜桃精品| 人妻大香蕉| 婷婷激情五月| 狠狠入| 人看人人摸人人操| 欧美在线 亚洲| 中文字幕人成乱码熟女香港| A啊啊在线观看| 在线无码视频| 久久久精品久久| 牛牛aV| 变态综合色| 色精品极品| 国产精品免费1区2区视频| 欧美视频第二页| 日本一级婬片试看三分钟| 日日妻色网| 麻豆啪啪啪视频| 青青草好吊色| 亚洲男人天堂网久久| 免费a级毛片av无码久久精品中文字幕| 色妇91| 五月婷婷爱六月丁香色| 亚州男人天堂| 鸥美插入视频| 五月婷丁香| 精品免费视频国产一区| 日韩情色AV| 亚洲欧美日韩二区视频| 999久久久九九九九| 第二页中文字幕| 91一区二区三区蜜桃| 亚州日韩97| 国产人妻精品久久久一区二区三区| av激情亚洲五月天| 中文字幕55555| 久久久久国产精品片区无码直播| 农村女一级毛卡片| 亚洲超碰综合网| 91 手机在线播放 绯色| 岛国毛片在线观看免费| 色五月AV| 亚洲熟女乱色一区二区三区久久久| 久99热| 欧美日韩大黄片| 偷拍亚洲| 中文欧丝袜诱惑| 国产精品久久9| 欧美午夜视频精品久久| 激情小说图片亚洲首页| 亚洲色综网| 偷拍亚洲高清图片| 成人av免费观看| 国产成人欧美一区二区三区的国产| 東南亚性呦成人伦理资源在线视频 | 婷婷综合在线| 性爱乱伦视频免费| 翔田千里AV无码秘 三区| 日日日色色色色色| 亚洲综合另类欧美久久久| 福利操逼| 日韩兔费看黄片| 快播久久人人aV| 天天天天天天天天综合| 人人人人人人少妇| 亚洲aV性爱| 欧美精品日韩久久久九| 天天干天天舔| 加勒比海色香蕉婷婷| 国产蜜臀在线| 青青伊人久久| 欧美一区二区在线资源| 五月天激情小说| 秋霞欧美性爰视频| 久久成人午夜精品影院| 一级毛片久久久久久久女人18| 91爱| sewuyueav| 美女上床网站| 一区二区亚州激情久婷婷欧美| 超碰碰97| 国产精品久久久三级无码| 丰满岳乱妇一区二区三区| 亚洲最新Av| 探花精品 一区二区| 日韩三级av片| 国产蜜臀精品一区二区尤物| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 男人的天堂无码| 啊啊啊不要嗯嗯在线观看| 男生女生啊啊啊啊| 中文有码第五页| 国产suv精品一区二区四| 五月天婷婷欧美三区| 黄色性爱网网| 在免费jIzzjIzz在线视频| 亚洲97综| 国产精品久久久| 日本不卡一区二区| 家庭乱伦麻豆| 69XX一中文字幕人妻91 | 久操在97| 亚洲无限观看| 97精品综合久久网| 久久九九一区二区三区成人| 精品久久久久9999| 色诱avtt| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 人人妻人人爱人人玩| 激情欧美97| 欧美综合自拍| 亚洲欧美清纯| 精品夜夜澡人妻无码AV| 中文字幕在线免费观看 | 综合激情二| 十八禁av无码免费网站APP| 亚洲精品无码久久AV| 91爱做| 日本 情色 1区2区3区| 欧美日韩精品久久久久东北老熟妇| 超碰午夜| 上床啊啊啊| 女人天堂av在线播放| 可以免费看黄片的视频| 九色精品视频导航1| 操逼视频免费日韩无码| 国产精品久久伊人| 亚洲色图久久成人| 精品然女一区二区| 综合情欲网| 大香蕉日韩| 先锋影音av先锋一区| 国产三区免费在线观看| 婷婷五月在线视频| 色婷婷综合久久中文字幕雪峰 | 亚洲成人性爱网站在线播放| 91亚洲色人| 日韩欧美aⅴ综合网站发布| 亚洲天堂男人在线| 97天天插| A级在线视频| 91狠狠综合久久| 日韩欧美水蜜桃人妻| 欧美九九九| 377p欧洲日本亚洲大胆| 人人乐大香蕉| 日本好吊色视频| 久久精品国产Aⅴ| 九九热最新| 日本淫穴在线| 中文操逼字幕| 欧美性爱系列| 1区2区3区中文字幕日韩| 亚洲欧美色图片| 五月婷婷AV| 欧美韩国你懂得在线 | 劲爆欧美人妖三区91| 97超碰久久| 一线黄色免费性爱片| 中文字幕老熟妇黄色视频| 欧美国产操逼| www.99色| 乱色视频中文字幕| 色偷综合| 亚洲色图尤物视频| 另类图片五月| 亚洲色交| 女人被添高潮免费视频| 久久久久久波多野吉衣高潮| 亚洲精品乱码久久久久久蜜桃麻豆| 超碰色男人操熟女| 操狠狠| 日比av无码| 中文字幕乱在线伦视频中文字幕乱码在线 | 婷婷久久五月综合激情| 国产亚洲国产超碰| 久久精品日韩专区免费观看| 26uuu成人影片| 嗯嗯嗯啊啊啊在线免费观看| 啊啊啊啊啊好大好舒服想要| 亚洲天堂男人| 69超碰综合| 影音资源男人日韩| 很黄很色的视频在线观看| 欧美性区| 日本操逼aaaaa| 久久久久日本视| 亚洲 欧美 色图| 99久久99九九99九九九| 1区2区3区中文字幕日韩| 碰碰97| 欧美|91色综合| 色综合av综合久久| 97超碰碰碰| 精品在线蜜臀| 人妻在线臀日韩| 亚洲中文字幕熟女| 欧美黑人与女人91~| 日韩精品人妻一区二区| 丁香五月天视频| 国产精品成人午夜福利| 人妻久久久久久| 欧美爆操91| 欧美 亚洲| 欧美黑人性猛交91| 日本不卡一区二区三区| 国产精品久久久久久久毛片1| 熟妇高潮精品一区二区三区下载| 伊人久久在线视频观看| 美女诱惑在线一区| 搡老女人老妇女AAA一VU麻豆| 91真人天天在线| 日本欧美一区二区三区免费| 人人操人人射人人干| 免費黃色視頻觀看一| 日日日色色色色色| 天天日天天干天天整| 夜夜操中文字幕| 日韩av在线播放不卡| 欧美自拍网| 综合五月婷婷| 国产精品操| 啊啊啊啊啊好大好舒服想要| 色哟哟511老熟女| 99国产精品免费| 日韩无码a片| 色综合 加勒比| 男人的天堂2010| 日韩人妻丝袜中文字幕| 不卡码视频| 日本精品高清一二区一本到| 青青五月天| 天天影视网综合少妇| 欧美一级黄片视频在线| 亚洲骚男同com| 国产精品老师| 天天日天天干天天色| 伦理日韩国产久久| 国产视频一区二区免费| 美女裸体无遮挡永久免费观看网站| 97鸡把在线视频| 97Ai亚洲| 婷婷情色五月天| 天天干天天操天天干天天操| 在线五区| 久久久av爱| 女人高潮大叫一级毛片| 美国日韩黄片| 中文字幕人妻丝袜乱一区三区| 国产人伦精品一区二区三区 | 色999;丁香五月| 综合五月婷婷亚洲一区| 26UUU欧美日本| J?P?NESEHD熟女熟妇伦| 九九碰九九爱97超碰| 欧美色偷偷| 欧美双插| 国产精品香蕉| 高清国产精品福利网站| 亚洲熟女av中文字幕| suv精产一二三区| 97爱综合| 高清无码久操视频| 日本中文熟女视频| 91av一区二区在线观看| 2020中文在线一区二区三区| 91精品国产91综合久久蜜臀| 欧美激情视频一区二区| 亚洲开心网| 高清有码一区二区| av毛片aaaaa免费看| 亚洲精品一区二区精品| 先锋激情∨在线视频播放| 思思热久久成人| 欧美不卡五十路| 欧美日韩在线视频网站| 国产又黄又粗又猛大片| 日本成人免费一区二区三区| 亚洲密乳AV| 国人欧美精品一区二区| 白嫩国模丰满一二三区| 色色五月天激情| 青娱乐 成人娱乐在线| 亚洲一本色码中文字幕| 亚洲成人妻日韩在线| 亚洲第二页| 91精品人| 手机在线中文字幕国产| 家庭乱伦网站国产| 激情网五月天| 双插在线| 男人天堂无码| 人妻少妇精品视频一区二区三区| 国产精品麻豆成人av| 福利视频一区二区微拍| 人人操人人摸avav| 亚洲av无线观看| 精品国产乱码久久久久A| 日韩9999| 超碰在线成人电影| 97香蕉网|