亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

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/欧美| 久久久18| 久久透逼视频| 玖玖综合网| 亚洲人在线成线成人| 国产精品爽爽v| 亚洲国产中文字幕| 97色在线观看| 日本久操视频| 色综合av男人天堂| 日日超碰亚洲| 91欧洲入口| 国产精品久久久视频| 亚洲国产欧美另类自拍| 日韩有码专区| av日韩中文字幕| 丝袜高跟澳门91视频| 长长久久88视频| 婷婷国产精品一区二区| 亚洲黄a三级三级三级看三级| 欧美日韩香蕉| 国产精品久久久久久照片| 97ai亚洲| 国产人妻精品一区二区三区秋霞| 国产农村妇女精品一| 超碰碰碰碰| 国产激情视频一区区三区| 99热18这里只有精品| 亚洲丝袜色| 婷婷AV一区二区三区| 欧美性爽xyxOOOO| 99热18这里只有精品| 久久综合精品一区二区三区| 91激情网| 狠狠图片青青草| 亚洲另类综合欧美| 一区二区三区国产精产| 天天干天天日天天射黄色大片| 久9视频| 色色色色日本| 国产深夜福利| 亚洲性爱免费电影| 天天综合网日韩7799| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 日本九九久久99| 丰满少妇人妻久久久久久| 91久久婷婷| 国产偷拍自拍在线视频| 在线v中文字幕一区二区三区| 国产JDAV无码视频在线观看| 中文字幕欧美丝袜07资源| 亚洲资源吧| 91九色丨国产丨爆乳| 亚洲情色五月天 | 这里只有精品视频在线观看麻豆| 午夜精品五区| 超碰成人公开| 欧美爱三级日韩久久| 九九精品无码专区免费| 岛国黄| 欧美 日韩 亚洲 春色| 伊人久久综合影院精品久久久| 97视频在线播放| 国产精品一区二区三区四区五区| 亚洲中字幕日本一区二区三区| 四虎精品永久在线播放| 强被迫伦姧在线观看无码网站| 国产一国产一级毛片古装| 97综合久久| 日本男人天堂| 家庭乱伦国产精品| 欧美视频一| 深夜激情 | 久久首页| 久热大香蕉| 五月丁香激情啪啪| 亚洲偷拍自拍在线视频| 久久久久久少妇| 一级性爱啪啪视频| 中出欧美| 2019男人的天堂| 久草久热| 思思性爱| 爽爽歪在线视频| 亚洲影视高清第一页| 日本超碰97日韩精品人妻| 永久免费av无码网站国产app| 女性91网站| 91夜色| 黑白配性爱AV成| 久草色在线观看| 欧美黑人熟妇精品91| 日韩午夜国产| 8050午夜少妇无码| 精品免费国产二区三区 | 欧美性五月| 午夜精品久久久99| 9久久久久| 91A欧美电影网站| 欧美大波激情xxxx| 日本3级一区二区免费| 黄色av片三级三级三级免费看| 伊人97超碰| 欧美 综合 亚洲| 久一区久久蜜桃| 在线A日本| 91大学精品激情戏| 亚洲国产中文字幕| 国产内射爽爽大片| 探花精品视频| 91麻豆天美国产欧美高潮| aV中亚| 樱花蜜乳av| 少妇超碰在线| 亚洲男人天堂av| 国产精品又黄又猛又粗| 国产亚洲99久久精品| 久久一二三四不卡 | 国产一区二区欧美日本| 老色69| 加勒比海人人操超碰在线| 97在线看| 国产日韩精品一区二区三区| 亚洲AV无码乱码| 九九99久久| 青青草原香蕉日本Ap| 隔壁邻居波多野结衣中文字幕 | 国产精品ⅴ无码大片在线看.| 一区二区三区四区色图| 精品久久无码午夜福利| 思思热在线观看| 亚洲人精品久久久| caorenqi shipin| 国产麻豆91欧美一区二区久久婷婷国产精品 | 精品中文一区二区| 蜜桃精品视频一区二区三区| 60秒不遮不挡| 高潮的A片激情扒开一区| 激情五月综合网| 人妻无码一区二区三区久久99| 亚洲第一页色网| 在线视频97| 久久天天性久久伊人| 91中文字幕在线观看| 日韩乱插| 992视频一区| 亚洲无码成人精品| 精品久操| renqi久久久久久久久久久久| 九九免费影片| 久久亚洲欧美中文字幕国语| 日日夜夜干| 国产精品伦理| 五月综合色| 欧日韩一二三f区| 老司机天天操| 抽插一区二区视频| 亚洲操逼无码| 妇女一区二区三区| 日本裸体久久色噜噜| 亚欧免费观看视频| 久久久久久久久久久人妻| 国产精品4p在线观看| 丝袜无码a片| 国产三级中文有码在线视频| 老女人91| 超碰狠狠操| 色汉综合| 我想要啊 啊 啊| 五月天婷婷综合网| 伊人黄色片| 中文字幕视频2区| 国产精品极品美女视频| 国产乱子伦一区二区三区在线观看| 另类图片五月| 在线一道啪| 我中文字幕6区| 男人的天堂亚洲| 日本精品五区| 夜夜嗨绯色| 一区二区影院| 亚洲春色一区二区三区| 亚欧操逼片在线观看 | 欧美18老人禁| 日本精品国产视频| 91人妻做a观看视频| 激情小说亚洲| 91蜜桃传媒精品久久久一区二区| 国产性刺激| 这里只有精品视频在线观看麻豆 | 国产精品久久久三级无码| 欧美亚洲天堂| 婷婷20月天青娱乐| 中文字幕日韩情色| 久草久热| 一区二区娱乐网站| 99色在线视频| 日韩欧美国产高清视频| 日人妻视频91| 人人摸人人添人人操| 超碰97COm中文| 青青草五月份天| 大香蕉欧美国产日韩高潮| 婷婷综合在线| 99热这里是精品| 中文字幕aⅴ在线视频| 欧美色涩| 亚洲欧美天| 欧洲小说色图视频另类| 清清草影| 久久av网| av东京热男人的天堂| 亚洲日韩AV视色| 伊人女女资源在线观看| 很黄很色的视频在线观看| 青青操网| 久午视频| 香蕉视频欧美一卡二卡| 欧美第一页| 色在线69堂| 99抽插| 99热精品在线观看| 精品妇女一区二区三区| 狠狠色噜噜狠狠狠狠狠色综合久久| 国产精品噜噜噜日日日| 久久精品国产亚洲AV嘿嘿| 97超碰人人模人人拍人人| 婷婷久久五月综合激情| 91丝袜| 尤物网站91| 78久久| 亚洲色图欧美一区二区不卡| 国产精品在线免费| 国产精品嫩草影院午夜两性| 欧 美 自 拍 偷 拍| 成人无码在线视频网站| 青娱乐欧美激情一区二区| 五十路六十路七十路熟婆| 香蕉热人人精品| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 男人天堂东京热| 69一区二区| 农村女一级毛卡片| 激情综合二| 中文字幕亚洲在线一区| 高清无码国产亚洲| 五月天婷精品激情| 日本一区二区电影网站| 午夜精品久久久久久久99热影院 | 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 九九热超碰97亚洲最新香蕉| 99re在线精品78| 国产精品乱码久久久、久久| 久久伊人最新网址视频| www超碰| 日本天天人人狠狠在线日美女 | 超碰97人妻免费在线| 九色在线熟女国产黑人| 男人兔费天堂| 9精品久久| 精品少妇一区二区| 99在线免费公开视频| 99久久精品国产高潮| 性爱动态120秒| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 97这里只有精品| 91色人妻| 人妻熟女字幕一区二区| 日日嗷| 欧美精品三区| 黄aaaaaaaaaaaaaaaaaa色网站| 国产欧美一区二区| 精品人妻视频一区二区在线播放| 都市久久精品激情亚洲| 婷婷国产精品九区| 日韩97视频| 香蕉久久AⅤ...| 国产亚洲色婷婷久久99精品91| 后入式在线免费观看60秒| 97久久超碰日韩精品| 亚洲AV成人无码一二三久久| 国产蜜臀精品一区免费尤物| 色原狠狠天天天| 青椒国产97在线熟女| 男人的天堂啪啪啪啪啪蜜桃不卡| 人妻天天爽| 精品国产无码中文| 国精综合一二三区影视| 亚洲码在线中文在线观看| 女人高潮大叫一级毛片| 天天躁夜夜躁狠狠躁AV| 91小视频| 人妻天天爽夜夜爽2| 中国一级操逼视频| 亚洲色图 综合| 熟女这里只有精品6| 夜夜狼人妻| henhen91| sss视频华人在线| 色波多| 国产女人高潮视频| 欧洲亚洲少妇| 亚洲天堂,男人| 黄页av| 在线国产探花| 热热色中文无码| 九九视品黄色| 久久亚洲AV无码白度| 久久精彩视频9| 一起草视频在线| 五月天大香蕉| 韩国免费播放一级毛片| 久无码| 无码高清操逼网址| 天天综合网AV91| 国语国产操逼伊人AV网| 18精品一二区| 精品一区二区啪啪啪| 伊人操| 插入综合网| 欧美日韩中文视频播放| 亚洲色图美腿丝袜| 日本精品不卡一二三区| 99色婷婷中文字幕乱色| 午夜福利免费福利视频| 亚洲在钱| 久久久久久午夜男人的天堂| 国产美女口爆吞精视频| 91色图片| 青娱乐久久艹| jazzjazz国产精品麻豆| 久久久噜噜噜久久人妻| 欧洲色| 欧美伊人电影| 麻豆婷婷成人一二三| 国产在线激情视频| 97干在线视频| 99青青草国产视频| 欧美日韩第一页| 亚洲国产成人综合碰碰三级经典| 97精品久久久久久久| 欧美人妻精品一区二区| 欧美+日产+中文| av操操不卡| 激情五月天社区| 伊人骚琪琪亚洲天堂网站| 午夜精品久久久久久久男人的天堂 | 51一区二区三区| 日本一区二区三区欧美日韩中文字幕| 午夜视频好爽啊| 国产一区二区在线播放| 天天看高清麻豆| AV九九| 久久受www免费人成| 色网1| 色老汉玖玖爱| 99精品热| 欧美网站免费| 欧美日日操| 亚洲AV色图一区| 超碰超碰95| 最好看的中文字幕在线2018| 少妇熟女1区2区3区| 91久热| 天天综合网~91综合网| 男人天堂站| 中文字幕日本久久| 去干网最新版| 蜜乳Av成人片网站| 中文字幕日韩专区精品系列| 亚洲欧美洲综合| 日本道日本道中文字幕日本道最新日本道在线观看 | 国内偷拍精品一区二区| 国产精品97视频| 蜜臀久久99精品| 夜夜夜久久| 99在线精品观看99| 日韩精品区二区三区不卡| 熟女人妇一区二区三区| 日韩人妻免费精品| 黑人黄片在线免费观看| 国产精品蜜乳AV| 国产白嫩漂亮KTV在线| 91国产操逼视频| 97久久天天综合色天天综合色电影| 性色乱AV一区二区| 偷拍 亚洲| 黄色污污污污污污网站| 啊啊啊不要好疼视频| 午夜理论片在线观看免费| 午夜国产乱伦视频| 牛牛操视频逼| 亚洲精品国产日韩无码AV永久免 | 色狠狠综合噜一二三区| 中文字幕天天天天天| 青娱乐 成人娱乐在线| 97亚洲一区| 精品视频日日夜夜| 亚州成人a∨| 欧美美女在线高潮999| 中文字幕在线观看第二页| 欧美永久激情一区二区| 91 国产丝袜在线放观看 | 影音先锋日本乱伦| av日韩手机在线影视| 成人麻豆av电影网站| 另类小色呦| 日本福利二区视频| 一道本久久棕合爱| 亚洲天堂自拍| h色99999| 欧美顶级黄片AAAAA在线免费看| 日韩av免费一级电影| 精品人成视频在线观看| 93人人操人人| 综合一区中亚洲国产成人综合精品| 色99视频| 怡红院怡春院| 欧美亚州色的图| 不卡视频一区蜜桃视频 | 午夜色婷婷| 91在线欧色| 亚州色图欧美| 欧美爱爱97| 免费一级精品啪啪视频| 蜜乳av首页| 国产一区96在线| 色婷婷久久| 伊人久久国产免费观看视频| 精品国产乱码久久久兰草影视| 欧美线天码中字| 热99re69精品8在线播放| 性videos欧美熟妇hdx| 人妻在线视频| 欧美日韩99精品麻豆传媒| 中文字幕超碰CAO| 神马九九九| 无码高清操逼网址| av大香蕉| 欧美性五月| 亚洲牲交| 综合久久99| 日韩精品9999| 男人久久天堂| 亚洲欧美日韩综合在线尤物 | 校园春色综合网| 亚洲av综合色区无码一| 国产农村妇女精品一二区| 欧美精品,四区。五区| 亚洲国产精品成人综合| 丁香五月影院| 啊啊啊啊在线播放| 日本天天操| 强上我不卡卡| 97精品久久| 精品亚洲国产成人AV制服丝袜| 超碰人人在线| 欧美色图在线视频少妇| 思思视频免费看网站| 日本三级中国三级99人妇网站| 狠狠躁天天躁日日躁| 亚洲国产97| 欧美专区日本专区| 天天操天天看| 无码聚合| 少妇大屁屁| 欧日a| 夜夜免费视频| 乱伦Av网| 久草成人影片| 天天天天天天天天天天干美女| 天天综合网入口~91| 国产精品美女久久久久久网站| 女人高潮大叫一级毛片| 黄页网站成人免费| 国产一区二区三区精品观看啪| 色阁阁AV综合网| 亚洲 欧美 制服 另类 自拍| 人人噜夜夜操| 一牛影视成人片免费| 97bbn| 午夜一级免费毛片| 中国小夫妻勾搭露脸淫荡对白| 亚洲乱色熟女一区| 成人一区二区三区四区| 久久久免费的精品| 蜜臀99久久精品| 色五月激情网| 97综合在线| 91色爽欧美| 色哟哟AⅤ| 久久理论字幕视频| 午夜福利精品| 97色欧洲| 啊啊啊好舒服好爽啊啊啊视频| 一区二区三区免费视频入口 | 久久这里是精品| 熟妇激情| 综合色播| 亚洲啪啪视频免费| 青青伊人这里只有精品| 五月婷丁香| 天天影视亚洲| 日本男人插女人的逼黄色| 国产性爱乱伦AV| 九九九九亚洲| 老熟女区| 中国国国产一级特黄毛片| 色婷婷日韩精品一区二区三区| 色呦呦呦在线观看视频| 97亚洲中文| 亚洲熟妇无码一区二区三区| 综合操逼| 曰本特级特黄特色黄色A级网站高清在线免费看 | 九九干| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 一级啊性爱在线视频| 久久久精久久久| 一牛影视成人片免费| 亚洲欧洲精品视频发布| 农村少妇久久久久久久| www鬼畜国产男人的天堂| 曰韩人妻中文字幕在线 | 欧美日韩人妻婷婷一区| 亚洲高清无码在线桃色| 久久久久夜夜夜夜| 欧洲精品欧洲精品| 欧美天天综| 欧美精品自慰系列寂寞少妇| 人人操欧美风骚| 91人妻久久久久久久久久久久久| 久久黄黄| 插日本熟女视频| site:sinbotex.com| 欧美美女后入| 久久久久9久久久久| 国产美女mm131爽爽爽爽| 精品九九九| 日韩久草| 9久久精品| 国产精品不卡一区二区三区av| 九九九九九九成人| 资源在线观一 二| 欧美aaaaaaa| 成年人网站在线免费观看| 97中文热色| 欧洲亚洲天堂精品| 欧美九九99久久精品| 欧美成va视频网站| 亚洲囯产精品女人久久久| 久久伊人最新网址视频| 97久久超碰国产精品| 色色操| 视频国产精品未满十八禁止在线观看| 国产精品人妻免费精品| 99久久久| chaopen97久久| 亚洲诱惑| 极品粉嫩少妇视频| 大香蕉免费中文| 日本欧美亚洲高清在线看| 日韩一区二区精彩视频| 欧美国产精品久久九九| 女性91网站| 不卡二三区人妻少妇| 欧美,日韩,中文,另类| av线电影| 日韩国产九九精品一区二区三区毛片| oumeizonghese,www| 国产精品亚洲四五区在线观看| 精品91摸| 欧美爆操91| 九九九综合精品| 啊啊啊啊啊啊啊国| 人妻在线臀日韩| 中文字幕丝袜美腿| 日韩成人午夜精品久久高潮| 97香蕉人人乳| 97在线青| 欧美日韩97在线| 久久九九热| 97视频免费在线| 欧美色图97| 国产丸一视频| 校园春色 亚洲| 国产97亚洲| 大香蕉中文在线| 99婷婷一区二区| 999精品国产高清一区二区| 五十路六十路七十路熟婆| 人妻丰满熟妇一区二区三| 国产A v无码专区| 黄aaaaaaaaaaaaaaaaaa色网站| 色色五月婷| 日本熟妇一区二区三区| 欧美色66| 综合天天。| 天天日夜干| 综合久久久久久久久91| 亚洲高清无码在线桃色| 自拍鲍鱼一区在线高清观看免费| 人妻少妇一区二区| 婷婷香网站| 另类老少妇| 欧美日韩插逼视频| 干婷婷综合网| 久久天天躁日日躁狠狠躁| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 人人操人人精品影片| 天天久久| 日韩无码黄色片| 涩五月婷婷| 日韩中文字幕av在线播放| 天天插夜夜爽| 久久在肏| 亚洲欧美中文一区二区三| 香蕉婷婷| 99热 按摩 日韩| 青青草导航在线视频| 偷拍 欧美 日韩| 国产精品久久久久久 百度| 神马精品视频| 国产精品久久久久久久久久二区三区| 日韩欧美日韩| 最新日韩黄片| 极品粉嫩少妇视频| 91 丝袜在线播放| 国产主播福利| 91综合在线| 欧美熟妇乱码在线一区| 极品美女嘿咻| 逼逼逼逼操操操操操操操操操午夜剧场| 久草免费在线视频| AA特级绝黄| 超碰 另类 欧美| 日本熟妇人妻一区二区三区| 日韩一区二区三区四区五区| 美女的肌被草喷水视频| 欧美少妇人妻| 看一级特黄a大一片| 91人人看| 鸥美中出| 久久久中文| 少妇一区二区三区在线观看| 一起草视频在线| 国产免费一区在线观看| 骚妻少妇精品性色无码四色A V| 国产无码三级视频在线观看| 久久人妻视频网| 精品国产乱码久久久影院| 综合久久久久久久综合网| 亚洲一二三精品久久网| 碰碰97| 亚洲欧美精品一区天堂久久 | 日人妻视频91| 日本黄页视频在线观看| 韩国黄片aaaa| 久久久久亚洲一区女同性恋中文字幕| 久久性爱视频免费看| 日韩乱码av| 欧美爱爱97| 色综合中文字幕不卡| 中文字幕熟女人妻丝袜| 超碰超碰欧美| 东京热天堂网| 国产精品情侣啪啪| 日韩激情电影中文字幕| 久久国产精品,久久国产| 美女被啪到深处抽搐视频| 日本熟妇熟色97一本在线观看| 久久久久幕乱码| 成人性爱av| 久久视频少妇美女| 色99视频| 精品国产Av无码久久久伦古装| 蜜臀久久99精品久久久老,,| 中文字幕后石码四区五区| 好湿好紧好爽 视频| 99精品热| 岛国网址国产 | 蜜桃色院一区久久 | 另类图片综合| 99 国产丝袜在线| 亚洲成人福利电影免费| 午夜经典| 一区久久久二区| 久久这里是精品| 97超级色碰碰| 婷婷综合激情| 97操| 啊啊啊不要好爽日韩无码一区| 26uuu国产日韩综合在线观看| 大香蕉92| 亚洲日本韩国极品一区二区| 日本三级A片网站com| 亚洲偷拍欧美激情| 懂色AV一区二区三区| 久这精品中文在线观看视频| 宗合情欲网| 国产精品激情久久久久久久| 亚洲Av诱惑| 国产嫩草精品A88AV在线| 日韩激情啪啪啪| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | www.五月天| 人人贴人人摸| 综合激情一一91| 综合熟女| 91精品女厕偷拍视频| 日韩欧美女求操每天更新| 亚洲日韩av一区二区三区百合| 激情综合二| 久热一区二区| 久久成人精品| 好好的日:com久久九九| 超碰人人草| 欧美综合娱乐久久| 啊啊啊啊啊啊在线观看| 久久偷偷色综合蜜桃| 日韩97视频!在线| 国产精品亚洲免费| 久久99草| 女人的久久久| 久操操| 青娱乐二区免费| 99xav| 色色热| 深夜激情无码| 粉嫩av久久一区二区三区| 久久一区二区蜜桃| 日韩欧美中文字亚洲慕| 亚洲图片 91| 噜噜噜狠狠色综合| 无码乱人伦中文视频| 人人妻人人澡人人爽人人精品浪潮| 99国产精品免费| 九九九网页| 亚洲色久| 日韩性爱再线视频| 曰本人妻人人澡人人夹| 中文字幕人妻资源在线| 欧美性天天| 舔足天天操天天射| 亚洲成人在线乱码色午夜| 97超碰中文| 97精品97| 91国产美女丝袜足交精品视频| 欧美黄页在线| 日韩无码嘿咻黑热久| a网站免费观看| 亚洲超碰在线| 五月婷婷基地| 久久激情五月| 丁香六月激情综合| 99精品久久| 99爱在线视频| 亚洲成A∨人影院在线欢看| 午夜福利在线合集| 大香蕉久| 久久久久久精品免费看A级| 白天啪啪晚上啪啪视频| 日日摸夜夜夜夜爽| 亚洲高清无码在线桃色| 亚乱色| 国产树林里野战在线看| 国产超碰人人操| 色五月综合| 骚货人妻偷情自拍在线视频| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 9久久久久| 亚洲精品九九九| 综合亚洲欧美精品日韩?v| 欧美日韩性爱电影在线| 91精品国久久久久久无码| 国产午夜视频| 日韩97精| 揉揉日日日日| 久操免费观看| 老熟女综合| 欧美成人一级麻豆| 少妇人妻好深太紧了vr91| 在线一道啪| 色五月激情综合网| 啊啊啊啊啊啊啊国| 青青草乱入乱欲视频在线观看| 国产人伦精品一区二区三区| 亚洲情色图片区| 亚洲好色人妻| 综合激情一一91| 丁香7月婷婷| 日本熟妇自慰性高潮一区二区三区| 亚洲天天自拍| 99re免费视频精品全部| 日韩黄色片子| 狠狠操狠狠| 中文字幕制服欧美久久一区| 国产风韵犹存熟妇三区| 欧美综合另类| ?亚洲伊人伊成久久人综合网| 久久久A∨| 精品一区二区三区四区外站 | 99re9这里只有精品| 啊嗯嗯啊好大好爽| 色婷婷国产精品一区在线观看| 国产亚洲日本精品在线| 97 亚洲 日韩 欧美 在线| 18禁久极品美女久久哦哟呀!| 亚洲丝袜在线观看| av三级电影在线播放| 午夜高清成人在线视频| 东北老女人的激情视频| 中文 人妻 制服| 国产午夜福利电影免费在线观看 | 中国黄色特级精品一区二区三区片| 78超碰| 狠狠综合网| 久久超碰、| 无码国产精品96久久久久孕妇| 美国aaaaa一级黄片| 美女裸体麻豆天美蜜桃91| 九九九精品一区二区无码| 久久中文色图| 亚州,欧美在线| 男人天堂黄片| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 97天天操| 国产a级午夜毛片| 97在线观视频免费观看| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 啊啊啊好多水| 色五月激情综合网| 熟女色图在线| 亚洲国产精品久久AV| 又黄又爽在线观看视频| 色综九九九一区| 日韩乱插| 欧美青青草视频| 一级毛片电影免费看| 亚洲欧美大| 四虎在线免费视频| 国产精品69人妻无码久久久| 欧美色图亚洲特色| 秋霞操逼片| 亚州精品丝袜-不卡成人免费| 91成人18| 麻豆精品久久久久久久| 成人精品无码| 国产suv精品一区二区四| 蜜臀视频网站| 97网址www| 91久久| 亚洲精品亚洲人成人网| 亚洲自拍小说| 404操逼福利视频| 精品超碰中文在线| 国产在线视频午夜精华在| 97亚洲综合电影| 国产捆绑一区| 欧美一区二区在线资源| 亚洲一区中文精品| 99www.bibizy香蕉资源国产一区二区三区高清 | 学生妹天天看| 亚洲九月丁香| 亚洲欧美内射| 五月丁香大香蕉| 欧美宗合色| 国产欧美日韩女同性恋ww喷水精品| 啊啊啊啊操死我| 夜夜高潮夜夜爽高清视频一| 久久成人国产精品| 欧洲乱码一区二区| 殴美在线AⅤ| 亚洲九九视频| 爱射综合| 亚洲图片日本AⅤ欧美在线| 久9久9精品| 熟女突然公开看18禁影片| 97亚洲色图| 美女久久久久久久| 又粗又长又爽在线观看| 嫩草 我啊~嗯~在线| 操比国产| 亚洲精品国产拍免费91在线| 久久久久久久一级黄色打同平台| 91av熟女人妻| 国产免费一区| 亚洲男人天堂2019| 亚洲春色一区二区三区| 任你干在线视频| 激情丁香五月婷婷| 青娱乐福利99| 91色欧美| 日本99一区二区| 日韩女模中文造逼| 欧美日韩欧美| 青青国产在线拍揄自揄拍| www色日本| 蜜臀久久99精品久久久久久| 欧色综合| 精品国产久热在线观看| av亚欧| 九九九九九用不成了| 亚洲欧美精品福利在线| 四虎国产精品永久在线囯在线| 久湿久久| 欧美黄色图片| 久久精品中文字幕无码l| 久草加勒比一区在线| 超碰综合色| 美女黄色一级A视频| 高清无码在线播放网站| 国产三级片在线观看| 久久人妻少妇| 日本九九久久99播| 久久人人看| 天天色,天天干,天天干| 色欧美亚洲| 成人开心网在线视频 | 欧美高清无码免费视频高清版| 日本亚欧爱爱| 久噜噜| 天美国产精品| 久久婷婷色| 久久久96| 亚洲情色综合| 天天综合欧美黑人| 久久久久久久久久久久久久久久9| 91在线页| www.色综合| 精品亚洲国产成人av网站| 91久久九九精品国产综合| 欧美亚洲图片| 中文字幕第23区| 九九九精品一区二区无码| 欧美色图中文字幕| 亚洲日产专区| 五月天激情婷婷| 爆操无码| 一牛影视成人片免费| 日欧操屄| 国产JDAV无码视频在线观看| 外国免费性情大片| 男人的天堂com| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 97在线亚洲| 啊嗯嗯啊好大好爽| 亚洲欧美日韩电影网站一区 | 91性网| 91n处女在线观看| 久伊人网78| 欧美性第1页| 91热热色| 中文字幕视频二区| 久久精品区| 日韩欧美传媒一区国产| AV色女综合| 揉揉日日日日| 亚洲高潮影院| 久久黄人人爽视频| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 色超碰综合| 极品AV网站在线观看| 日本熟妇精品九九| 久热99999| 欧洲一区二区| 久久大陆| 欧美激情一| 少妇大屁屁| 欧美少妇色图| 亚洲码在线中文在线观看| 欧美性猛交美女自慰91| 蜜桃臀av在线观看| 天美av在线观看| 亚洲丝袜色图| 伊人久久久日韩一区| 欧美亚洲高清不卡| 亚洲欧美日产国产91毛片| 一区二区播放| 啊啊啊久久| 啊啊啊啊网站| 色屁屁影院www国产| 色黄色美女大长腿午夜视频| 国产精品自拍欧美在线| 91日本在线观看| 热久久91婷婷| 中文字幕超碰CAO| 天天干夜夜操一区二区| 午夜国产成人精品视频| 影音先锋视频在线| 色五月婷婷色| 色眯眯射| 亚洲综人| 国产在线综合福利网站| 成人av影院在线观看| 中文字幕亚洲在线一区| 国产av美女被艹的乱叫| 欧美不卡在线美女| 五月天加勒比啪| 爱逼综合| 91艹B视频| 久操黄色视频| 亚洲诱惑天堂| 中文字幕在线观| 日韩中文字幕国产| 少妇滛荡视频| a人欧美综合天堂麻豆| 桑老女人九区| 国产视频一区二区三区在线免费观看| 精品一二三区久久AAA片| 综合激情五月天| 美女啪欧美一区| 久久久青青草| 人人妻人人爽一区二区三区| 精品九九| 亚洲爽图| 久久精品国产96精品亚洲拳交| 六月婷婷综合| 日本中文字幕一区| 精品无码一区二区三区色欲| 一区二区三区黄色片a| 日韩乱中文| 九九九九久久久| 天天综合站| 夜草网站| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 中文字幕视频免费| 亚洲性爱成人| 天天做天天爱天天爽| 长久操视频| 在线无码视频| 亚洲aw毛茸茸在线| 999精品女人| 久久精品中文字幕无码l| 国产SV一线| 校园春色亚洲| 五月丁香影院| 99久在线精品99re8| 亚洲欧美综合区自拍另类 | 亚洲精品蜜桃久久久久久久| 26uuu国产亚洲综合| 欧美亚洲激情小说| 91老司机在线| 五月婷婷六月丁香| 欧美日韩亚洲少妇寂寞影院正在播放 | 91视频在线观看18| 午夜福利免费精品视频| 欧美日韩亚洲五月天婷婷| 人人干人人操人人爱| 欧美三级不卡| 中文字幕蜜乳av| 乱精品一区字幕二区| 粉嫩AV输入| 国产免a费看黄片在线| www.91欧美| 激情网色| 97爱碰| 盗摄女人妻在线| 亚洲熟女国产综合另类| 澳门黄片一香蕉视频| 日韩精品人妻中文字幕有码午| 永久免费观看的毛片的网站| 欧美综合骚| 亚洲中文字幕精品一区| 欧美日韩淫加| 蜜臀久久99精品久久久久久婷婷| 丁香五月天堂网| 99热这里只有精品1| 欧美性猛交美女自慰91| 国产精品美女视频诱惑| 日本精品88888888| 精品国产91av一区二区三区| 欧美少妇性乱| 國產尤物AV尤物在線觀看| 天天色踪合| 91free福利| 伊人骚琪琪亚洲天堂网站| 国产免费永久精品无码| 风韵犹存大大大大香蕉| 天美av在线观看| 国产精品内射婷婷一级二| 久插综合| 五月天玖玖资源站| 91精品丝袜久久久久久| 97国产超湿| 日本免费中文字幕在线| 欧美性爱一区二区三区四区| 欧美暴力猛交| 黄色一级视| 97se亚洲综合自| 美女裸体麻豆天美蜜桃91| 肉动漫无遮挡h在线观看| 麻豆精品A片免费观看| 久操视频资源站公开| 国产91 丝袜在线播放 | 日韩AC| 高清孕妇孕交| 成人一区二区三区四区| 日本久久天堂| 午夜精品久久一区二区| 青青草久久| 亚州精人品大香蕉| 日韩人妻免费精品| 国产又粗又大硬免费色网视频| 北条麻妃性愛视频| 五月婷婷无码| 96久久久久久久| 91网站18在线| 五月天开心网| 日韩无码人妻| 玖玖大干人妻| 大香蕉伊人亚洲| 国产精品一二三在线看| 久久这里只有精品9| 天天激色| 亚洲综合在线视频| 9久在线视频只有精品| 亚洲中文字幕日产无码久久| www99热| 欧美福利视频啊啊啊啊| 美女性91| 亚州九九九精品视频| 区一在线观看| AV九九| 超97在线精品视频| 国产老太乱伦一区| 色婷婷日韩精品一区二区三区| 欧美熟妇精品黑人巨大一二三区| 丁香九月激情啪| 日韩欧无码一区二区三区免费不卡| 蜜桃午夜视频一区二区 | 色香综合| 97超碰国产亚洲精品| 试看福利| 欧美爆操91| 欧美78p| 亚洲色图亚洲无码强奸乱伦| 伊人丁香五月婷婷| 白嫩少妇| 国产免费内射视频| 黄色av播放免不| 伊人97色天使| 久久久999日本大片| 久久五月丁香| 欧美极度丰满熟妇hd| 伊人黄色片| 日韩熟女无码| 日韩精品三级| com 首页 18岁 禁区 女优 免费 精选 同城| 日本一天色道久久久精品视频| 天堂九九九九九九九九九| 任你艹| 久99热| 丁香六月东京热| 1769一区二区| 福利伊人玖玖国产| 啪啪视频亚洲第一| 欧美日韩另类在线播放|