日韩精品一区二区三区在线视频放-无码中文字幕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
返回資訊列表
国产精品对白自产拍| 99re热| 日韩人妻丝袜中文字幕| 国产精品久久久三级无码| 黑人在线91| 国产精品乱码久久久| 精品国产污一区二区三区| 天天操天天干一区二区| 蜜桃久久一区二区| rivers-china.com| 久久久久9999精品九九九| 激情色播| 亚洲中文字幕精品久久久久久直播 | 亚洲熟妇熟在线电影视频| 欧美日韩性爱操大逼| 性色综合网| 亚洲污污网站| 婷婷三区| 素人播放一区| 国产伦精品一区二区三区在线观| 熟妇的味道HD中文字幕| 丝袜加勒比| 伊人久久大香蕉线AV五月天| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 国产成人资源| 久久熟女人| 超碰在线观看av不卡| 另类欧美色| 精品人妻一区二区蜜桃视频| 97操碰| 超碰在线第一页| 久久久婷| 亚洲欧洲久久天堂| 国产农村妇女精品一| 色成人Www精品永久观看| 国产操逼视频在线观看| av爱爱爱| 欧美日日操| 欧美精品不卡一二三四在线91| 丝袜无码a片| 亚洲情色五月天| 亚洲国产精品9999在线观看| 少妇无码av专区线| 中文字幕亚洲永久精品| 91影库| 久久久啊啊啊| 青青久久艹| 国产sv美女内射| 黄色成年| 国产不良强奸视频免费看| 国产真实子伦对白| 国产三级资源在线观看| 性爱免费视频成人| 国产高清在线观看欧美| 欧美网站免费| 长长久久免费视频| 麻豆性爱视频在线播放| 日韩精品人妻中文字有码在线| 久久久久久亚洲精品不卡人乳| 在线观看国产黄色| 日本在线一二| 欧美一区二区三区大综合| 欧美婷婷久久| 老色69| 老女人爆菊| 亚洲不卡av在线| 亚州久久9| 精品综合久久久久久97| 欧美色图97| 欧美日韩大陆黑人少妇99| 蜜臀av在线播放一区二区三区| 96精品在线| 国内外色色色色色成人视频| 神马福利久草| 91亚洲人| 中国一区二区亚洲人妻| 91久久久久免| 五十路熟女工口| 97在线亚洲| 女人天堂av在线播放| 蜜乳AV.COM| A片 AV一级在线播放观看免费| 99自拍视频在线| 97欧美精品综合| 99热8| 一区二区无码视频| 亚洲欧洲自拍图片专区满春格| 亚洲欧洲综合av在线| 国产色精品午夜大片| 99视频只有精品| 艾草av| 亚洲同性aV综合| 99久久无码| 国产女生在线| 欧美色图成人网一区二区| 欧美男人的天堂| 91精品微拍福利| 香蕉综合网| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 大香蕉人妻| 久久欧美按摩999| 性无码专区2020| 一区二区三区四区免费视频| 欧美亚综合色图| 婷婷精品久久av影视| 久久国产在线一区二区| 涩涩五月天| 四虎884a| 亚洲美女av无码| 成人看片网站| 蜜臀网址在线| 国产一区二区三区导航| 9久综合网| 午夜操一视频一区| 日韩图区 偷拍| 一本道综合色图| 97超碰天天爱天天爱| 操人妻视频| 欧美黄片视频在线观看免费| rivers-china.com| 操99| 欧亚韩国999| 久久久久亚洲Av无码专区老牛影视| 色黄污美女啪啪啪免费网站| 天天做天天爱天天爽AV| 久久精品国产精品一区| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 自拍偷拍国产欧美日韩韩| 九九人人操| 久草久日| 天天日B夜夜干B时时操B| 啊啊啊啊啊好大好舒服想要| 免费精品无码一级毛片牛牛影视 | 久操电影网| 99精品成人免费看| 久久久久9久久久久| 老汉网| 欧美精品一二三| 中国亚洲呦女专区| 金典av| 国产亚洲深夜激情| 欧美性,色九九| 欧美极品性爱天天射| 视频在线观看一二三区| 91精品国产91综合久久蜜臀| 熟女91网| 久久香蕉综合一本到3atv| Julia Annxxxxx| 婷婷影院入口| 91成人18| 国产久久久久影院老熟女| 人人爱人人乐人人操| 亚洲欧美日韩偷拍色图| 国产精品青草综合久久| 欧洲色综合| 天天日B狠狠操| 日本精品网站在线中文| 日本好吊色视频| 欧美亚洲尤物久久| 一区二区三区看视频| 女优免费一区二区永久| 成人一级性爱| 精品乱码久久久久| 青青草天天亲夜夜操网| 天天看天天日天天操| 又黄又粗又硬又长又大| 亚洲97成人在线观看| 精品视频专区| 国产九九九九九九九九| 国产剧情在线| 330dv亚洲成年视频网| 不卡啪啪视频| 人人干人人操人人爱| 欧美熟女丝袜| 91欧美丨精品丨入口| 日韩免费看黄片| 三上悠亚在线毛片91| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 日韩欧美久久婷婷网站| 日本曲间由美性生活片| 精品久久久亚洲AV成人网站| 狠狠操,使劲操| 日韩av情韩国爱禁区av一区二区| 亚洲免费97免费| 日本一区二区做爱的视频| 91n欧美| 91超碰人人| 日本在线视频导航| 欧美日韩国产另类综合| 射综合网| 欧美日韩精品久久久久久久久东北老熟妇| 男插女青青影院| 99热精品在线观看| 国产精品一区二区黄片| 亚欧性爱ab| 欧美人与动性人交a| 91色人| 欧美性暴力猛交XXXX| 免费精品福利在线观看| 日本在线一二 | 91丨人妻丨国产丨丝袜| 国产一级内射高清视频| 亚洲国产奇米影视久久| 久久成人国产| 97精品97| 在线精品福利免费播放| 超碰97在线中文| 97精品免费视频网站| 探花在线免费观看视频国产一区| 骚逼一区二区| 天天操天天射天天日| 北京专精特新企业招聘信息| 老司机午夜精品福利视频一区二区| 性色AV网站| 欧美亚洲激情一二三| 91中文字幕制服丝袜免费视频| 性在久久久久久| 亚欧美综合网。| 国产又粗又大硬免费色网视频| 国产18精品亚洲精品| 国产精品人妻无码久久久老鸭窝| 刺激性视频黄页| 性色亚洲| 久久久久9999妇女| 欧美视频一区二区在线| 国产伊人精品在线| 九九九久千久久激情蜜桃在线看| 乱伦一区二区三区‘| 人妻熟女一区二区| 婷婷深爱五月| 男啪女色黄无遮挡免费观看| 精品乱码久久久久| 五月天婷婷色| 蜜乳AV.COM| 亚洲天天精品| 久久久久密| AV和黑人在线播放| 粉嫩久久久极品| 这里只有精品视频在线| 12一15性XXXX粉嫩国产| 校园春色中文字幕AV| 免费看黄视频亚洲网站| 最近二区三区视频大全| 91丝袜激情在线| 久久综合激情| 操www| 无码男人天堂| 殴美大黄片| 久久东京伊人一本到鬼色| 久久宗合亚洲| 淫骚熟女一区二区三区| 国产SV一线| 噜噜吧,噜噜色,噜噜| 欧美色www亚洲国产阿娇要播| 高清孕妇孕交 交孕妇| 亚洲91少妇| 性爱视频啪啪啪啪| 多毛小伙内射老太婆| 亚洲天天操| 日韩欧美~中文字| 99精品伊人| 国产综合久久久鬼色| 天天爽夜夜操| 激情自拍 校园春色| 色五月婷婷久久| 国产99精品一区二区三区免费| 亚洲无码视频免费在线观看网址!| 午夜九九| 亚洲 欧美 精品专区 极品| 国产精品久久久久久久免牛肉蒲团| 久久久久久久亚洲Av无码| 亚洲无码精品AV久久久| 欧美高清18A片| 亚洲黄片免费在线播放| 国产精品免费日韩| 国产成人+综合亚洲+天堂| 肉嘟嘟www视频在线观看高清| 国产福利在线视频网站| 超碰人人干| 加勒比久久综合网高清| 亚洲天堂女优在线| 日本护士高潮| 国产亚洲色停停久久99精品91| 亚洲一二三精品久久网| 国产精品农村妇女| 啊啊嗯嗯好爽| 99国产在线 精品 视频| 天天色综合图片| 蜜桃视频一区二区三区在线观看| 久久久久久久久久久久久9999| 97日视频| 日韩国产在线观看av| 黄色性爱网网| 夜夜夜久久| 欧美天堂亚洲电影院一区在线播放| 伊人久久亚洲中文字幕不卡| 久久久久久久久久久久九| 亚洲性天堂| 先锋色眉乱伦资源| 国产亚洲人妻综合日韩 久久| 亚洲蜜臀懂色| 起碰97| A久久| 国产成人精品午夜福利| 亚洲国产欧美中日韩成人综合视频| 亚洲欧洲美腿丝袜| 日韩电影免费网站麻豆视频| 国产精品999zyz| 九九天堂| 亚洲天堂2020| 天天做天天爱天天高潮| 色色网91| 日韩欧美中文字| 三级精品三级在线观看| www.高清无码诱惑一区.com | 色香91| 欧美一区二区福利在线| 五月天久久婷婷亚洲 | 啊啊啊男女| 黄色av片三级三级三级免费看| 超碰这里有精品| 夂久色| 人人么人人操| 欧洲人妻视频| 中文字幕91综合| 91精品人妻电影| 激情小说亚洲| 97超级久久| 91热情品| 99999精品成人| 少妇高潮对白在线观看| 国产最火爆久久国产网站网站| 小草av不卡亚洲二区| 深田咏美亚洲精品福利社| 天美传媒AV在线| 欧美成人国产精品| 美女在线H91| 人妻精品一区二区在线| 久久五十路熟女人妻| 亚洲日韩美女丝袜美腿人妻视频| 任你干在线视频| 亚洲综合99999| 久久草大香蕉| 色综合99| 日本人妻A片成人免费看片| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 欧美日韩国产人人| 欧美A片中文字幕| 人妻精品一区二区| 在线中文字幕视频| 亚洲丝袜诱惑| 亚洲一区中文精品| 亚洲av噜噜噜噜噜噜| 国产深夜福利| 国产久久久久影院老熟女| 天天夜躁日日躁狠狠2002| 91九九| 亚洲日韩人妻中文字幕一区| 青青草国产一区二区三区| 人妻一区二区三区视频 | 亚洲av总站| 国产精品视频一区二区三区八戒| 嫩草一区二区在线观看| 久久久久久久78| 久久99操天天日| 日本一区二区做爱的视频| 亚洲成a人v欧美综合天堂下载| 久久综合av| 九九成人精品| 四季AV综合网址| 婷婷色网| 岛国片在线观看视频亚洲| 一级aaaaa欧美中文字幕录像片| 欧美春色| 97久久久| 欧美日日操| 国产精品原创巨作?v网站| 97久久天天综合色天天综合色电影| 久久久噜噜噜久久久| 精品伊人久久久大香线蕉小说| 岛国A V在线免费看| 午夜αv| 欧美操逼录像国产黄色国产| 国产日本顶级一区二区三区| 日本天天干天天操一区| 国产精选视频| 国产精品香蕉| 免费福利视频中文字幕| 不卡一区二区日本视频| Blackedraw视频一区二区| 性爱免费视频成人| 亚洲综合成人网| 四虎国产成人精品免费一女五男| 桃色人妻在线视频| 少妇人妻激情四射| 日韩99999| 丁香五六月啪啪| 中文字幕123| 国产版a级片直播在线| 国产精品熟女乱伦| 麻豆九九九| 日韩欧视频| 欧美色性情| 亚洲在线| 国产精品三级视频网站| 欧美亚洲第1页| 香蕉99秘 一区精品蜜桃臀| 欧美色网| 午夜免费视频1000| 久久动漫精品视频这里只有精品| 99国产精品| 91天堂色男人的天堂| 操人妻丝袜高跟| 国语精品对白| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 精久久久| 日本天天吊| 久久国产视频专区一二三| 亚洲色天堂九9| 一本一道波多野毛片中文在线| 久久久久久久久久久97| 中文字幕熟女人妻丝袜| 玖玖色综合| 熟女露脸激情自拍视频| 日韩激情中文字幕有码| 啊啊啊啊视频免费| 91成人18| 好爽,再快点啊哈嗯嗯嗯嗯| 精品欧美不卡在线播放| 久久亚州高清| 69视频入口| 白丝AV网站| 青草伊人网| 亚洲色诱惑| 国产一区二区在线看| 成人性爱全视频观看| 亚洲图片视频小说| 五月婷婷综合在线| 婷婷超| 亚洲 欧美 另类 日韩 人妻一区| 91精品伊人久久久大香线蕉91| 青青伊人久久| 好吊妞转入那个网| 熟妇xxxxx性春色| 91精品国产一区三一| 91人人爽人人爽| 亚洲天堂人妻熟妇视频| 超碰99re| 久久AV无码1区2区3区| 天天草夜夜草高潮片| 丰满欧美放荡少妇在线| 久久国99999| 成人乱码一区二区三少妇| 97资源站国产精品| 色综合久久夜色精品国产天堂| 婷婷六月色开| 国产精品极品美女视频| 去干网最新版| 不卡av在线中文字幕| 精品视频一二三中文| 日本高清熟女久久一区| 91久久伊人婷婷青青草| 和协无码影院| 桃色五月天| 亚洲最新中文字幕免费| 欧美A片中文字幕| 热无码中文亚洲H一道本一区二区| 亚洲成人帖图| 91激情国产| 欧美九九九| 夜夜精品视频一区二区| 香蕉大久久久| 精品女同一区| 伦理弟一页| 青娱乐av在线| 日本一片一区| 久久爽爽精品| 色综合1991| 天欧美在线| 亚洲熟久久| 欧美亚洲丝袜人妻制服中文99| 中出后入| 国产区在线| 全国男人天堂网| 亚洲色图8| 香蕉视频欧美一卡二卡| 天天看天天日天天操| 91制服丝袜| 无码不卡八戒| 无码国产Av| 伦伦成年午夜免费视频| 嫩草 人人网精品| 99只有精品| 超碰综合97在线| 强乱老妇中文字幕| 国内毛片免费h片在线| 性欧美另类高清| 二对二中文字幕。| 亚洲成成熟女人综合一区二区| 91精品人妻| 亚洲av综合色区图片亚洲| 深爱五月天| 中文字幕精品丝袜| 色九色久| 国产日韩欧美亚洲精品95| 成人看片网站| 精品九九淫乱男| 欧美综合1性辶| 狼狼色丁香久久婷婷综合五月| 亚洲黑丝在线| 亚洲欧美天| 欧美日韩国产高清在线一二三区 | 97干天天| 99精品久久久久久久婷婷蜜桃| 色诱中文字幕| 精品人妻一二三| 久久久国产成人一区二区三区在线 | 国产精品午夜福利视频| 日韩熟女无码| 欧美狠狠弄| 亚洲一区二区AV| 成人八戒网站| 风月影院男女十八禁| 国产视频一区二区三区在线免费观看 | 亚洲av资源| 久久国产精品91| 97美日韩视频| 性站 | 日韩人妻精品久久久久| 亚洲色图综合网| 久久思思热| 婷婷综合伊人一区| 天美国产精品| 久久透逼视频| 综合大香蕉美。| 色婷婷香蕉| 欧美激情专区| 色女99一级片在线观看| 亚洲一区二区性爱电影| 亚州综合色| 亚州国产精品乱| 人人看黄色视频| 欧美91网站| 这里只有精品久久| 999热这里只有精品| 日本好吊色视频| 激情五月天丁香| 小说区 图片区色 综合区| 丰满搜索结果 -第18页- 久久高清无码 | 夂久色| 探花一区二区三| …中文字幕亚洲乱,97人妻无码费视…| 黄色大香焦1级‘′‘| 99re这里只有精品9| 99只有精品| 国产女上位好爽在线| 91c色| 亚洲成人AB| 97露脸精品丝袜| 免费精品中文字幕| 情色图区| 精品无码人妻一区二区免费蜜桃| 国产女上位好爽在线| 午夜福利av电影在线| 伊人91| 中文字幕色AV| 日本三级精品| 欧美另类天堂| 亚洲男人的天堂AV| 九九热超碰97亚洲最新香蕉 | 67914亚洲精品| 久久欧美性爱视频| 国产动漫操逼视频| 99热思思| 成人夜夜爽| 久久久久久中文字幕中文字幕最新| 久久激情综合| 久久久一区二区三区四曲免费听 | 一级AV性爱| 一级做a爰片性色毛片久久| 白丝AV| 在线综合 亚洲 欧美中文字幕| 久久精品人妻一区| 99视频这有这里有精品| 亚洲最新中文字幕免费| 国产伦乱91| 亚洲精品第一| 丁香久久| 日韩淫色网| 91欧美综合| 日韩一级欧美一级国产一级台湾| 奇米狠999| dy888午夜老子影视达达兔| 欧美一级黄色免费专区| 国产美女高潮叫床视频| 色色色色色色色色色色色色色色综合| 熟妇人妻一区二区| 国产欧美日产一区二区三区 - 国产欧美日 | 白丝少妇一区二区| 春色综合免费| 久久久久久一日韩字幕无码| 91视频国品一二三区| 91欧美美女日韩国产婷婷| julia ann久久| 蜜桃久久一区二区| 亚洲成熟国产精品美女| 日本岛国黄色网址| 亚洲自拍一区夜夜操| 日曰骚久久精品| 亚洲精品啪视频| 日韩人妻精品久久久久| AV久日| 五月天久久综合网| 亚洲午夜免费狠狠干| 欧美后入式| 久久精品国产亚洲AV片多多 | 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 精品久久久久av影院| 亚州精人品大香蕉| 香蕉视频精品亚洲一区二区三区在线播| 婷婷五月天影院| 天天综合麻豆视频| 国产麻豆福利av在线播放| 欧洲亚洲综合| 久久东京国产精品视频| 久久熟女嫩草成人片免费| 黑人嘿嘿嘿超爽免费视频| 九九九九97| 中文AV制服乱伦| 牛牛久久国产精品视频一二三| 在线综合 亚洲 欧美中文字幕| 超碰99热中文字幕| 国产亚洲日本精品在线| 少妇丝袜在线观看AV| 亚洲操逼网| 8x福利精品第一福利视频导航| 天天舔天天日天天射| 日本精品成人无码| 韩三级a视频在线观看 | 操逼操逼逼操操逼91 | 色视频蜜乳| 啊啊啊啊操死我了| 免费观看啪视频| 久久久九九九| 欧美日韩狠狠爱| 国产熟女二区| 欧美 传媒 麻豆 日韩 偷拍| 欧美一级色| 国产一区二区三区导航| 一级@啪啪视频| 五月丁香六月综合缴清无码| 欧美色图99| 九九九久千久久激情蜜桃在线看 | 狠狠操天天干| 久久一区二区三区入口| 黄页网站免费高清在线观看| 中文字幕精品探花视频 | 国产精品乱码久久久| av 模特一区了| 性色国产东北露脸精品视频| 亚洲第一黄色av网站| 一级一性爱免费视频| 四虎精品一区二区| 日本加勒比无码专区| 亚洲无码日韩电影| se..亚洲欧美| 日本阿v天堂在线观看| 五十路熟女人妻一区二区在线观看| 91亚洲欧美综合高清在线| 好舒服视频| 成人天天爽| 97超碰超欧美。| 日韩亚洲97| 天美传媒精品久久视频| 99热在线播放| 国产精品麻豆免费视频| 丰满人妻一区二区三区四区| 亚洲欧综合另类无码一区| 乱伦日本色图AⅤ| 色狠狠综合| 91在线综合网| 丝袜亚洲91| 麻豆区久久久久亚| 大香久久| 久久久久久国产手机AV| 免费黄色片子| 2020中文字幕在线观看| 九九九九免费高| 午夜男女爽爽爽在线视频 | 好爽免费视频| 亚洲综合图片在线| 夜夜夜久久| 欧洲熟妇xxXx欧美老妇裸体 | 少妇色欲综合网2| 5252色欧美在线| 天天流夜夜操| 十八禁啪啦拍视频无遮挡| 午夜舔阴达高潮视频免费看| 九月伊人中文字幕| 91 偷| 日本高清一本二本免费不卡| 久草久日| 91国产丝袜白虎| 97 国产精品| 老女人碰碰在线碰碰视频| 成人精品电影| 97超碰天天爱天天爱| 久久久久无码| 蜜桃久久久久久| 日本一片一区| 美女AV一区二区| 超碰碰激情97+久| 久久亚洲不卡一区二区三区| 人人综合| 欧美极品色| 操一对老熟妇爽上天视频| 搡老女人老91妇女熟女| 色偷偷男人的天堂麻豆| 欧美啪啪天堂| 欧美性爱第1 页| 日韩免费簧片| 免费伦费视频在线观看| 美国日韩黄色片| 91在线|亚| 久操操| 色婷婷一区二区三区久久午夜成人不| 亚洲在线综合| 51国产午夜精品视频| 丰满人妻无码一区二区三区| 操一区| 色欲色香天天天综合网www-亚洲综合国| ...日韩成人一区二区三区字幕| 欧美操逼录像国产黄色国产| 色呦呦国产精品免费看| 婷婷激情五月天小说网| 成年男人的天堂| avav青青草久久夜| 影音先锋每日最新资源在线观看| 国产欧美日韩一区二区三区| 天美传媒国产原创中文字幕亚洲欧美另类 | 999熟女精品| 国产9区| 九九久久99| 女上位精品在线| 欧色网址| 免费αⅴ在线观看| 极品尤物在线观看| 亚州春色| 老司机午夜精品视频| 成人短视频在线观看| 欧美熟女妇同| 国产强奸无码乱伦| 九九在线视频| 国产偷拍网站| 九九av| 欧美日韩狠狠爱| 国产亚洲色婷婷久久99精品91葵花宝典 | 天天操天天谢| 操www| 青青青艹在线视频| 激情综合二| 任我爽在线视频免费观看 | 性爱欧美五月| 91人妻做a观看视频| a人片中文字幕一区二区| 日韩人妻制服丝袜av| 伊人大香蕉在线| 亚洲天天做日日做天天谢日日| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 国产免费永久精品无码| 久久久免费视频18| 免费看久久久性性| 亚洲脚交| 色噜噜综合在线| 色香综合| 99热导航| 亚洲欧洲综合视频在线| 亚洲国产97| 亚洲国成人情色好看电影| 巨爆乳一区二区爆乳区| 大香蕉手机在线| 日本大片日本一区二区免费高清| 不卡av免费在线网址| 久久精品夜色国产亚洲AV| 亚洲高清无码在线桃色| 中国少妇啪啪视频| 91日日夜夜| 日本高清电影欧美色图| 黑人操一区二区| 日韩精品资源专区二区| 久久天堂网| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 性老妇一区二区三区| 久久av一级av少妇av高潮| 91蜜臀人妻中文字幕在线| 91人妻视频| av天天在线观看| 午夜精品久久久久久久99蜜桃一| 97国产|免费| 裸体美女久久久| 东京太热久久久| 色九月婷婷| 视频分类 国内精品| 免费日韩黄片| 亚洲美女av无码| 久久99干一本高清| 日韩精品作爱导航| 啊啊啊啊在线观看网址| 99xav| 9 7超碰在线免费观看| 中文字幕高清20页视频| 精品国产片亚洲一区| 囯戸精品高潮呻吟旡码| 人妻偷拍一区二区三区| 91亚洲网| 久久草草亚洲蜜桃臀| 看免费一级在线播放毛片| 懂色av一区二区三区天美传媒| 蜜臀Av一区二区三区| 日日妻色网| 亚洲青青草| 天天日美女的B| 熟女AV一区| 国产精品69久久久久久久| 国产少妇内射| 九九久久玖玖| 国产福利电影| 欧美日本中字另类在线| 精品午夜福利国产一区二区在线观看 | 中文字幕日韩人妻视频一区二区三区交换夫妻| 亚洲综合在线高清| 精品999日本| 亚洲色图综合网| 久久夜嗨| 亚洲图片 欧美电影| 91观看 国产白丝| 特色a在线上| 一类无码操逼视频| 熟女突然公开看18禁影片| 韩国一级婬片A片无码天美| 国产欧美一级在线观看| 天天躁日日躁XXXXYY| 看日韩操逼| 青娱乐av在线| 台湾佬中文娱乐网久久久久久久久久com| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 欧美色图91p| 欧美专区17页| 色综合一区二区三区| 狠狠婷婷亚洲中文综合久久| 亚洲精品影视老司机| 国产亚洲 中文欧美久久| 熟女精品一区二区在线观看| 欧美综合另类| 婷婷视频网| 国产视频第2页| 欧美呦呦性爱| 久久久啊啊| 另类图片五月天| 岛国毛片手机在线观看| www.色99| 国产夫妻性生活视频| 另类图片欧美激情综合| caorenqi shipin| 大香蕉中文201| 欧美激情中文字幕另类小说| 亚洲天堂资源| 亚洲97| 刺激性视频黄页| 国产捆绑一区| 日本天堂网| 日韩三级伊人| 精品视频日日夜夜| 中国熟妇| 老司机老司机午夜影院| 久久久久国产| 色官网在线| 超碰九区| 国产四虎在线| 日本三级A片网站com| 四虎视频在线观看| 日韩av一级黄片| 五月婷婷青青草娱乐伊人| 五月丁香激情综合| 天天操妹子| 精品区9| 亚洲AV色图一区| 色九九九九久| 亚洲少妇在线观看| 蜜色网色哟哟| 97在线播放| 岛国小电影| 18啪啪手机免费性爱| 欧美97视频| 自拍大香蕉乱插| 97精品网| 日日干夜夜欢| 口爆综合网| 亚洲一区二区精品福利| 久久精品久久久久久久| 国产精品午夜成人福利| 无码视频黄色网战| 97在线免费| 青青草国产盗摄一二三区| 国产一级做a爰大片免费久久| 神马午夜久久| 欧美激情色婷婷花野真衣一区二区| 国产中文字幕曰本毛片| 日韩无码极品| 友优传媒精品在线一区二区| aaa淫乱视频| 久久久com| 无码人妻一区二区三区色欲aⅴ| 大肉棒导航| 天天射影院| 人妻精品免费一二三区| 9118禁| 国产97在线视频| 国产9熟妇视频网站| 久久夜夜夜| 日本熟妇精品九九| 欧美爆操91| 激情五月婷婷综合| 日韩av不卡在线观看| 国产亚洲精品A在线观看下载| 欧亚三区动漫| 96麻豆精品一区二区三区| 四虎884| 亚洲的天堂网| 亚洲淫色网中文| 天堂日本亚洲欧美| 青青网三级视频| 男人的天堂2010| 青娱乐国产精品| 91动漫操逼视频| 欧美东京热精品A∨| 熟女人妻一区二区三区| 色官网在线| 欧美自拍偷拍免费观看| 日本一级性爱| 亚洲操逼网| 久久精品一区二区三区不卡| 日韩一区二区三区四区五区| av一区二区三区 中文| 久久久久久亚洲精品不卡人乳| 日本有码影片下载| 亚洲淫色网中文| 久久大香蕉97| 老司机午夜精品视频| 国产精品婬乱一级毛片彝族| 久久激情五月| 99re不伦| 新怡红院| 9国产超碰| 岛国AB视频| 精品少妇后入一区二区三区四区人妻巨乳| 久久黄黄| 中文字幕精品专区搜索结果91| 国产60页| 99视频只有精品| 久久久18禁| 我要色综合网| 欧美性巨大╳╳╳╳╳高跟鞋| 五月天色图| 青青草十区九区爱夜| 啊啊啊慢点| 搡老熟女免费视频| 色色婷婷五月天| ai欧美亚洲小说| 蜜臀99久久精品久久久懂爱| 久久久久久AⅤ无码免费肉站| 四虎精品永久在线观看| 免费少妇一区二区| 亚洲 图片 欧美 色图| 久久综合97| 性爱乱伦网址| AV在线播放网址| 国产极品美女高潮无套在线观看 | 91情色在线| 亚洲高清无码AAA久久久精品| 亚洲诱惑| 午夜国产成人福利视频| 欧美九一精品久久久熟妇| 亚洲最大AV网| 久久有码视频| 99精品无码| 欧美成人精品一区| 婷婷99狠狠| 777超碰| 亚洲精品819| 亚洲欧美另类激情小说| 久久久久久91香蕉国产| 欧美偷拍区| 国产中文字幕在线观看| 丁香久久| 18禁免费视频| 欧美热图99| 国产欧美伊人| 日韩欧美aⅴ综合网站发布| 蜜屁Av| 婷婷色网| 国产高清MV操逼视频| 蜜臀久久久99久久久久 | 手机看片1024你懂的国产| 欧美高清色| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 国产精品亚洲四五区在线观看| 国产一区二区三区精品观看啪| 91无码西班牙视频在线| 超碰97玖玖爱| 欧美中出1| 久久毛卡| 午夜.DJ高清在线观看免费7 | 日本欧美m v精品网站加| 大香蕉av在线| 深夜激情无码| 日本孕妇一区二区视频操逼免费看 | 少妇一区二区三区高速| 好好的日:com久久九九| 久草久热| 免费看日产一区二区三区| 亚洲国产美女久久久久| 国产女人9999| 九九九九免费高| 国产一区96在线| 日韩成人网址| 日本操嫩b网| 亚洲成人免费中文字幕| 国产一区免费午夜视频| 日韩欧美性爱电影在线观看| 欧美在线第五页| 色九九九综合| 91精品久久久久五月天精品| 少妇一区二区三区| 丝袜加勒比| 天堂成人网| 丁香七月婷婷| 综合亚洲网| 粉嫩av一区二区三区天美传媒| 丝袜高跟澳门91视频| 麻豆色99999| 蜜臀一二三区| 亚洲美腿丝袜香蕉影视欧美成人| 综合91网| 男人的天堂.com| 水野优香在线观看| 激情综合五月| 少妇超碰在线| 久久久蜜桃一区二区三区| 男人天堂.AB| 久久久96精品| 啊啊啊慢点| 99久久精品无码一区二区毛片免费| 欧美黄色手机在线观看| 大学生口爆吞精| 欧美日韩操逼嗦吊| 亚洲AV成人无码久久精品播放| 天天拍天天操| 国产性感骚丝袜在线| 九9热伊人| 9久久久久| 欧美另类综合久久| 欧美色色色| 综合色图区| 好爽要喷了| 日本精品中文字幕视频| 日本性爱少妇| 天堂av2019| 92大香蕉| 精品偷拍13p欧美dodk视频| 九色97| 日日夜夜模| 99e久久国产精品| 日本色色色| 久久e6只有精品| 国产熟妇 码视频户外直播| 亚洲一区操| 91 国产丝袜在线放观看| 人人操人人精品影片| 久操网无码在线| 国产乱弄免费在线视频。| 久久久96| 免费观看的av| 大香蕉中文| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 日韩综合色图| 人妻-91porn| 欧美淫乱视频| 午夜色婷婷| 2003天天干夜夜操| 东京热综合久久一区二区| 婷婷人妻激情| 在线播放成人网站| 风间由美日韩欧美久久| 国产伦精品一区二区三区在线观| 9997se| av网站在线观看了| 99国产精品在线观看| 91欧美综合| 中文字幕第页| 亚洲中文一区二区三区| 青青草久久一区网| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 欧美少妇色图| 婷婷三区| 婷婷亚洲天堂| 亚洲人妻色图| 精品v1区| 成人片在线播放| 亚洲一区二区三区婷婷| 婷婷五月天补不补| 黄色片一区二区三区四区五区| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 天天操女人| 欧美性xxxxx狂欢| 1024午夜激情男人的天堂| 五月丁香激情综合| 国产日韩无码一区二区三区久久区| 日本黄色裸日本黄色裸体| a一区二区三区乱码在线| 老熟乱一区二区三区四区| 久久只有精品一区二区三区| 插穴性爱视频在线观看| 二级久久网| 一区麻豆 高清中文字幕| 国产精品视频白浆免费| 3PAV乱伦视频| 久久中久文96| 91精品人妻啪啪间| 伊人aaa| 亚洲男人天堂2| 成人熟女视频一区二区三区| 一块操欧美性爱| 亚卅熟女乱色| 日韩色| 亚洲成人美女无吗| 69少妇一区二区| 国产精品久久久久久久久久久久久久| 日日妻色网| 不卡码视频| 九九热男人天堂| 国产精品老师| 中文字幕中文字幕一区二区| 国产精品久久久久久久无码AV| 日本天天干天天操一区| 亚洲天在线| 四虎884| 97精品网| 国产精品久久久吖| 欧美黄色片在线播放| 国产理论视频在线播放| 日韩AV无码网站| 日韩国产乱子伦App| 在线综合色| 亚洲乱熟女一区二区三区大香蕉| 亚洲蜜桃V妇女| 超碰日本97美女人妻人人玩人人爱| 日本99热| 97久久精品国产| 亚洲欧美综合图片|