日韩精品一区二区三区在线视频放-无码中文字幕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
返回資訊列表
四虎AV影视国产精品亚洲精品| 欧美 综合 亚洲| 10000部十八禁看电影| 91欧美巨乳| 久久精品店| 亚欧无码在线| 亚洲中文电影| 两女互慰AV高潮喷水在线观看| 五月丁香色色网| 婷婷五月天无码 | 色五月AV| 亚洲性少妇| 久久久性少妇| 天天看,天天做| 操逼精品视频| 可能人人看人人摸| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 一区超碰一区| 国产色呦呦| www.AV有限公司一区| 日韩免费簧片| 97大色网| 天天综合网~69| 欧美性爱在线无码| 日韩欧美三级| 爽爽淫人网| 天天92av| 人人乐大香蕉| 一二三区操逼国产91| 95人妻爽爽人人做人人澡| 国产97色在线| 色综合加勒比四四季| 2024年最新色情网站在线观看| 欧美综合站| 国产老女人久久毛| 97硬碰| 超碰色综合| 91熟女熟妇视频网站| 亚洲一区二区AV| 欧美精品成人亚洲| 韩国三级一线观看久| 国产九九久久久精品| 女人精品内射国产99| 日韩精品一二三四| 亚洲欧美国产中文视频| 国产A v无码专区| 91男人天堂网| 人人天天欧洲| 日逼国产| 日日超碰亚洲| 久久少妇人妻| 蜜桃臀av在线观看| 久久黄片国产一区二区| 欧美在线中M| 巨爆乳肉感一区二区三区竹菊影视 | 久久久久久久极品香蕉视频| 超碰中文字幕人妻草一区| 免费久久一级毛片大黄| 中文字幕乱偷人妻久久艾草网| 果冻国产精品麻豆成人av| 在线视频资源| 91久久久久久久| 午夜男人一级A片7777| 91成人无码| 色女99一级片在线观看| 熟女人妻一区二区三区| 久久久久亚洲熟妇熟女| 一卡二卡在线播放| 夜夜操av亚洲一区二区| 精品性爱一二三区| 成人午夜高潮av猛片| 精品综合久久久久久97| 日韩精品.久久精品.AV女优.天美传媒 | 色五月激情网| 综合一区中亚洲国产成人综合精品| 日韩精品午夜操呦呦不卡影院| 天天综合欧美综合| 九九九偷拍| 玖玖视频在线资源一区二区三区| 黄片免费久久久久久久| 亚洲国产成人7777| 日本色色视频网站| 国产粉嫩蜜臀av一区二区三区| 老司机午夜福利视频一区二区| 亚洲欧美精品一区天堂久久 | 啊啊啊久久| 天天日天天屌天天操| av一区二区三区 中文| 国产一区二区二区按摩精品啪视频| 亚洲精品国产熟女| 图色综合网| 一起草精品人妻| 久久黄片国产一区二区| 欧美日韩国产成人高清| 伊人操| 欧美少妇高潮久久91| 另类图片五月| 涩五月婷婷| 一起草欧美| 97碰| 国产无码三级视频在线观看| 人、人、摸,人、人、草| 日韩猛交| 九色精品视频导航1| 日本2020一区二区| 久久精品导航| 综合熟妇一区二区三区| 超碰吊日色| 精久久久| 一区超碰一区| www.狠狠操| 国产精品无码久久久久2028| 国产乱伦亚洲| 久久久久久久久久久免费精品| 天天干人人乐| aV中文麻| 99少妇内射| 九9热伊人| 久操在97| 色网亚洲人| 欧洲站一级二级三级h| 久久99草| 热热色国产一二区AV| 狠操91,com| 亚洲少妇激情视频| 青青草中日韩在线| 欧美97网| 国产精品人妻无码久久久互動交流 | 色欧洲| 老熟女91| 中亚精品极乱| 日韩免费a级毛片无码a∨ | 偷拍 精品另类 凸凹了四区| 97一区二区蜜臀| 99久久久无码| 日本高清熟女久久一区| 东京热,男人的天堂| 97碰碰色| 激情抓乳插进去啪啪啪日韩 | 成全在线观看免费观看| 操逼天美3区| 中文字幕乱在线伦视频中文字幕乱码在线 | 裸体美女久久久| 97资源免费视频| 亚洲成人帖图| 干超碰碰熟女| 蜜桃视频成a人v在线| av天堂精品久久| 天天日天天屌天天操| 精品无码一二三四区| 蜜桃精品一区二区三区久在线| 国产精品国产| 999精品女人| 夜夜爽夜夜爽| av天堂5| AV九九| 伊人久久国产免费观看视频| 欧美综合网1| 久久久一二三四区| 欧美精品精品一区二区| 久久美女国产| 日日橹狠狠爱欧美超碰| 精品无av| 搡老人老9丨女老熟人| 欧日韩不卡视.频| 欧美日动态视频| 精品大全99999| 成人性交午夜免费片| 九九精品无码专区免费| 情色AV电影| 日日干夜夜欢| 亚洲欧美高清无码| 九月婷婷久久| 天堂在线一区二区| 91w欧美| 黄片aaaaa一区| 亚洲伊人久久精品狠狠在线| 啊啊啊啊好多水| 四虎影视永久在线免费| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 国产成人+综合亚洲+天堂| 国产60区。| 97免费在线观看| 久久久久久久久成人av解说| 亚州中文字幕超碰97| 91亚洲欧美激情| 浪人综合网| 色综合中文字幕不卡| 国产风韵犹存熟妇三区| 久久免费精品视频免一| 香港日本韩国人妇99www.wccm20| 日韩无码操逼片| 欧美午夜精品久久久久久超碰| 久草线上视频免费看| 国产成人精品必看| 蜜臀AV一区二区三区激情综合| 四虎精品永久在线观看| 日本国产欧美高清在线| 天天日熟妇| 日韩亚洲中文有码视频| 久久亚洲色图中文字幕| 亚洲AV无码AV吞精久久久久| 97久久国产精品| 国产精品呦一区二区三区| 第四色亚洲色图| 久久久久夜夜夜夜| 熟妇人妻一区二区三区| 欧美亚洲天堂| 亚洲日本男人天堂网| 日本一级特级毛片视频| 2017大香蕉国产精品久久| 少妇高潮流水av免费| 久久天天摸| 国产农村妇女精品| 毛片视频白嫩| 精品午夜福利导航| 亚洲情色一区综合| 五月婷婷六月丁香网址| 欧美在线中M| 另类 日韩 熟女| 青草视频人妻在线观看| 五月综合婷婷久久网站| 久久久月天| 久久99视频| 好属操| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 999色欧美中文字幕| 久久婷婷亚洲| 亚洲欧美天堂| 天天综合网AV91| 91高清无码下载| 欧美色图自拍| 人妻精品综合中文字幕在线| 亚洲激情综合另类男同| 欧美91网| 中文字幕超碰CAO| 入口操逼网站| 中文字幕乱码在线| 亚洲综合69| 一起草精品人妻| 熟妇人妻精品一区二区| 啊啊啊不要啊啊受不了了视频在线| 国产精品无码久久久久2025| 美女爽到高潮91| 亚洲性综合9| 国产一区二区三区白丝| 夜夜黄| 国产老熟女| 成年人一级黄色毛片大全在线观看| 亚洲,欧美,综合网| 欧美精品丝袜久久久中文字幕| 免费无码国产精品v片在线观看| 日本精品一区二区三| 97视频网站在线观看| 无码人妻精品一区二区中文| 91丝袜在线观看| 亚洲 欧美 小说| 日韩成人电影AV| 国产精品白丝在线播放| 欧美草草高清日韩视频| 欧美大香蕉97| 北条麻妃99精品青青久久| www.久久最新地址| 免费A片三p视频| 五月天AV资源| 神马久久69| 日韩欧美女优电影| 亚洲一区二区精品福利| 嗯啊抽插大香蕉网页| 清纯唯美亚洲综合| 日韩天天综合| 久久久熟女一区| 老熟妇综合| 99精品热| 欧亚免费视频| 精品国产精品一区二区| 中文字幕亚韩| 收看日本人日bb| 久久9精品| 天天热精品| 丝袜天堂| 亚洲精品 超碰| 亚洲情色电影网| 麻豆啪啪啪视频| 青娱乐亚洲自拍| 人人操人人干xxx| 蜜臀久久99精品久久久久久-DVD| 91亚洲丝袜熟女| 亚洲少妇色图自慰直播| 男人的天堂2000| 情色五月天久久久| 韩国轻伦国内自拍一区| 翘臀vidoes| 一区二区三区四区色图| 五月丁香婷婷综合| 99热最新| 婷婷五月综合激情| 思思热在线视频精品| 亚洲各类熟们中文字幕| 久久久久成人亚洲国产| 日本熟妇人妻中出视频| 亞洲久久直播| 婷婷中文网| 奇米狠999| 萌白酱自拍视频| 欧美性爱免费短视频| 国产精品一区二区手机看片| 国产乱伦搜索结果91P| 粉嫩av在线| a级免费在线观看| 欧美精品三级黄片| 澳门黄片一香蕉视频| 亚洲无码 国产无码| 人人操人人摸人人骑| 欧美一级黄色免费专区| 欧美性爱第一区| 欧美人妻一区| 91操碰| 97资源超碰| 中文啪啪视频| 神马久久久久久久久久| 亚洲青青草| 欧美啪啪啪91| 97九色| 久久精品国产AV一区二区三区| 欧美A片中文字幕| 精品国产人成在线| 99色热| 九九九久千久久激情蜜桃在线看 | 亚洲不卡av在线| 久草色悠悠在线视频| 一区二区视频你懂的| 后入式五六区| 欧美少妇色图| 91社区拍啪人妻| 激情五月婷婷综合| 精品亚州18| 午夜亚洲| 精品久久无码午夜福利| 高跟丝袜AV专区国产| 天天做天天爱天天爽| 成人AV素股で擦久久| 欧美色色人| 四虎av在线| 色婷婷六月丁香七月婷婷| 亚洲一本大道中文字幕无码在线| 亚洲骚女一区二区三区| 97视频在线观看网站| www.99中文字幕| 国产不卡中文字幕免费avi| 色偷偷人人玩人人舔人人操人人摸人人爽| 丰满人妻一区二区三区免费 | 中文字幕久久亚州无码| 国产400孕妇孕交群| 亚洲中文字幕久久人妻| 99爱在线视频| 亚洲系列欧美| 人人做,人人操,人人摸| 午夜免费视频1000| 激情网色| 婷婷尹人大香蕉免费| 国产成人天堂| 中文AV制服乱伦| 一区在线观看中文字幕| 亚洲欧美日产国产91毛片| 精…码一二三区| 日韩国产成人自拍视频| 91精品成人| 老熟女91| 啊啊啊啊嗯嗯嗯用力好爽| Aa东京男人的天堂| 色色网91| 欧美性,亚州色| juliaann欧美丝袜办公室| 日本免费专区| 久久草视频污视频| 成人影院永久免费观看网址| 国产熟女少妇一区| 亚洲图片第一页| 日韩在线观看中文字幕视频| 在线小视频| 日韩操逼性鲍| 免费看污网站| 翔田千里爆乳巨臀无码| 日本三级人妻a人妻一在线| 欧美日韩久久精品爱爱| 色区久久| 美女爽到高潮91| 精品性爱无码在线播放| 久久精品日韩专区免费观看| 国产日韩欧美| 欧美 日韩 亚洲 春色| 亚洲熟妇丝袜在线观看| 性无码专区2020| 好湿好紧好爽 视频| 97超碰中文在线| 性爱视频久久| 综合久久97| 国产蜜臀精品一区免费尤物| 无码137片内射在线影院| 91九久| 日韩无码一级黄色av片| 黄总AV色图| 久久精品日韩| 色香91| 国产尹人在线视频免费| 国产日本顶级一区二区三区| 美女刺激久久国产欧美| 亚洲欧美日韩免费观看| 今日头条成人一区二区三区四虎精品| 国产日韩在线播放av| 天天操天天谢| 五月色丁香| 亚洲色狠| 亚洲成人妻日韩在线| 殴美在线AⅤ| 少妇高潮九九九九九九九| 亚洲五月婷| 神马午夜久久| 九九九久久久久| 91成人久久| 超碰社区97| 中文字幕在线24| 中文字幕精品探花视频| 天堂伊人久久| 五月天伊人| 三级日本一区二区三区| 91黑丝操| 热久久精品| 国产精品免费1区2区视频| 东北操逼| 尻女朋友一夜| 中文字幕123| 欧美美女视频| 欧美大干日韩| 91精品电影18| 国产成人免费观看在线视频| 青青草在线视频人人想人人上| 亚洲图片偷拍视频区| 2019午夜福利视频| 偷窥自拍亚洲色图| 亚洲AV无码国产成人| 亚洲毛片基地专区| 精久久久| 97视频620| 国产精品一区二区黄片| 岛国免费视频在线| 精品免费成人久久| 好看的91视频| 五月天开心网| 加勒比久久综合网高清| 美女天天干| 96精品久久久| 老女人老91妇女老热女| 成人影 天天操 亚洲| 国产92麻豆天美精品色欲5| 亚洲色性情三级| 久久久久久九九九九| 农村少妇久久久久久久| 欧美碰碰综合色| 国产呦精品一区二区三区下载| 伊人网青青| 久久婷婷苹果| 人妻天天爽夜夜爽2| 夜夜操老骚逼视频网站| 婷婷九月| 日韩黄色成人性爱| 黄色小视频日本txt| www国产无码| 东京热综合久久一区二区| 国产情色在线| juliaann丝袜大战黑鬼| 97久精品| 蜜桃臀av在线观看| 综合一区中亚洲国产成人综合精品| 色黄污美女啪啪啪免费网站| 97精品免费| 97色在线视频| 免费视频97| 999国产精品999久久久久久| 亚洲91射| 欧美色图小说综合| 香蕉欧美| 久草精品国产蜜臀| 色翁荡息又大又硬又粗又爽| 超碰日韩人妻| 日本一区二区三区午夜观看| 国产精品久久久久久久无码AV| 蜜臀久久99精品久久久久久婷婷 | 夜夜爽33333| 欧美日韩999| 97香蕉碰碰人妻国产欧美| 久久久久国产精品喷潮免费观看臀 | 久久精品高清无码一区| 嫩草 我啊~嗯~在线| 欧美亚洲成人在线一区二区三区| 动漫区日韩区欧美区| 99精品网站| 久久久久网站-538在线视频-欧美永久乱码 | 日韩亚洲精品一区二区| 国产精品呦一区二区三区| 激情露脸爱| 黄色激情电影在线观看| 国产亚洲日韩在线三区黑人| 欧美日韩 强奸乱伦| 色久桃花影院在线观看| 亚洲无码AV九九九| 可以看的av| 91狠婷| 中文字幕精品丝袜| 男人精品天堂一区| 欧美色老汉| 91天天综合日韩欧美| 日韩一级久久毛片| 国产人伦a片信息免费片| 青青操狠狠撩| 91国产精品在线看| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 婷婷丁香五月激情啪啪| 久久理论字幕视频| 青青伊人久久| 熟妇色99| 天天摸夜夜添无码小视频| 99精品成人免费看| 你操综合| 亚洲熟久久| 欧美啪啪色吧在线| 污污汅18禁网站在线永久免费观看 | 欧美日韩久久精品爱爱| 黄片qw| 亚洲精品a人片在线观看视| 九九色综合| 极品少妇99| 久久禁| 久久精品午夜国产亚洲AV无码| 黄页视频网站野外| 熟女啪啪视频| 夜夜国自区| 色哟哟 日韩精品| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 欧美 精品国产制服第一页 | 天天干2区3区| 亚洲国产97在线精品一区| 国产性刺激| av九九| 日本精品无码三级网站| 亚洲欧美另类激情小说| 凌辱美少妇久久aV| 中文字幕av一区二区三区人妻少妇| 麻豆久久久久久久久丝袜| 日本大片日本一区二区免费高清| 成人网站 免费观看| 日韩操p| 日韩兔费看黄片| 日本黄色精品| 国产精品不卡少妇白| 欧美小说区视频区| 96精品久久久| 色网亚洲人| 四虎免费视频| 搡老熟女国产1000部| 97频视在线| 欧美精品偷拍| 中文字幕AV片| 日韩综合97P| 加勒比人妻综合| 久久骚| 大但人体久久久久| 天天操福利视频综合网站| 久久久神马影院| 天天日骚逼熟女| 亚洲第一男人天堂| 人妻91少妇| 在线不欧美| 久久久久久九九九九| 91精品人妻一区二区三区蜜桃| 久久久啊啊啊| 成人国产视频在线观看| 日韩av电影成人在线| 狠狠色伊人亚洲综合网站色| 都市久久精品激情亚洲| 福利伊人玖玖国产| 99久视频| 67194无码不卡| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚 | 精品久久久久9999| 亚洲情色在线| KK色在线影院| 色综合av综合久久| 乱伦图av| 69人妻精品一区二区绯色| 亚洲精品丝袜| 北野未奈加勒比av| 免费视频一二三区| 成全在线观看免费观看| 久久激情五月| 熟女中出视频| 日韩91网| 免费?级毛片无码?∨蜜芽试看| 欧美午夜一区二区三区| 不卡在线一区,精品一区二区三区中| 天堂资源欧美| 人人九九精| 国产精品人妻无码久久久老鸭窝| jizzjizz欧美| 天综合中文| 色哟哟av网址| 欧美色狠| 中文字幕精品区先锋资源| 殴美牲| 激情五月天校园春色网| 91丝袜在线观看| 激情小说成人日本无码一| 久久综合九九| 天天日美女的B| 九九九精品| 国产中文字幕曰本毛片| 67194无码不卡| 天美传媒麻豆一区二区三区国产精| 最新av中文字幕高清| 久久激情网| 中文一区在线日| 97亚洲综合影院| 午夜精品视频777| 亚洲男人的天堂AV| 日韩欧美性吧婷婷乱伦大香蕉| 思思在线免费视频| 嫩草伊人久久精品| 亚洲欧洲激情卡通另类文学四射小说网站| 免费看黄视频亚洲网站| 色女99一级片在线观看| 伊人久久AV诱惑悠悠| 不卡啪啪视频| 99久久9| 人人贴人人摸| 国产精品久久久蜜臀| 91成人无码| www.婷婷| 欧美熟妇色| www…国产操逼| 国产免费一区| 一区二区三区免费岛国片| 国产日韩人人| 国产一区自拍欧美日韩| 99天天超碰| 老司机深夜18禁污污网站| 久久精品免费| 午夜国产成人精品视频| 精品久久久av| 国产精品直播在线观看直播| 蜜臀AV一区二区三区激情综合| 国产精品视屏| www.操| 91视频精品| 久久免费少妇| 天美av在线观看| 啊啊啊好想要| 亚洲 se图 欧美电影| 国产精品com| 欧美色图片91| ji熟女.com| 偷拍2020| 亚洲另类电影| 97AV在线观看| 激情图片伦理国产一区二区日韩| 国产无码久久高清| 少妇极品熟妇人妻无码| 黄色AAAAA欧美| 欧美激情亚洲情色| 超碰人人在线| 人人操人人色网| 超碰97网址| 欧美日韩香蕉| 久久在肏| 亚洲大色堂| 色yeye成人免费视频| 日本高清视频在线观看黄已三辽| 欧美日韩成人在线| 欧美色网| 欧美熟女丝袜| 九九黄色网| 亚洲日韩av专区无码| 欧美少妇性乱| 免费一级欧美片片线观看| 友优传媒精品在线一区二区| 久久这里都是精品| 色在线亚洲视频www| 国产精品97超碰| 久无码| 永久免费发布性爱网| 天天天干977| 91jk色拍| 狠狠爱综合| www.狠狠干.coom | 1人人看人人摸人人操| 91操人| 国产女人高潮视频| 国产精品呦一区二区三区| 91制服丝袜| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 国产区性爱在线视频秋霞豆 | av凤凰久久久| 狠狠操一区二区| 日本中文字幕在线视频| 日韩免费一级性爱视频| 男人的天堂三级| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 999亚洲国产视频| www国产精品| 天天操天天谢| 夜夜操老骚逼视频网站| 亚洲强奸乱伦影视网| 日本潮催一卡操| 中文字幕一区二区无码成人 | 欧美三级中文字幕hd| 国产精品人妻免费精品| 日韩欧美麻豆| 久久亚洲色图中文字幕| 爱干爱射网啊啊啊| 亚洲欧美精品一区天堂久久 | 人人射人人操人人摸| 综合亚洲欧美精品日韩?v| 日本在线999| 热热色色综合| 欧美 日韩 另类 亚洲| 日韩欧美女优电影| 国产无马av| 亚洲暴力强奸AV| 丰满人妻一区二区三区四区| 美国日韩黄片| 国产精品美女视频诱惑| 美女久久久久久久久久久| 欧美色图亚洲色,麻豆| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 欧美日韩操操操| 操婢日韩| 日韩人妻一区二区| 精品视频一区二区| 国产一区二区二区按摩精品啪视频| 啊啊啊啊嗯嗯在线久久久| 超碰这里有精品| 久久综合久色欧美综合狠狠| 亚洲第91页 | 97在线免费视频| juliaann丝袜| 欧在线一二区| 啊啊啊爽爽| 久久精品一区二区| 欧美狠狠| 超碰午夜| 思思视频免费看网站| 欧亚无码视频| 少妇一区二区三区高速| 日韩色欲久久一二三四区| 欧美日韩精品一区二区三区高清| 精品人妻av在线播放| 欧美一级特黄淫片在线观看| 肉嘟嘟www视频在线观看高清| 黄片免费看黄片免费看| 久久婷综合| 97资源制服丝袜| 尤物av网站| 美女黑人91神马| 夫妻AV网站| 久久久性爱| 91久久青青草原精品| 欧美一区二区三区互相| 国产性爱在线视频一区二区| 国模无码一区二区三区在线| 韩国黄色片精品久久久| 亚洲精品久| 日本欧美色| 日本 情色 1区2区3区| 久久久精选| 亚洲 无码 偷拍| 探花一区二区三| 性爱乱伦网址| 女人的久久久| 亚洲性少妇| 人人妻人人爽人人精品| 欧美欧美啪啪视频| www.大香| 欧美久久九九| 国产精品天干天干综合网麻豆| 久久久性少妇| 午夜舔阴达高潮视频免费看| 人妻 中文 日韩| 99这里有精品视频| 淫骚熟女一区二区三区| 麻豆色约约| 成人26uuu| 自偷自拍的亚洲视频| 久久av色| 精品一区二区三区18| 亚洲国产一级黄色视频| 日韩午夜啪啪视频| 国产精品久久久久久久久久久久久久久久久久 | 中文字幕福利视频一区二区三区在线观看| 久久人| a级成人毛片免费视频高清| 丁香五月成人| 玖玖爱综合网| 2025年A片视频精品| 国产免费久久久久| 自拍视频大全亚洲专媒视频/一区二区三区 | 狠狠中文字幕| 蜜臀一二三区| 青草草免费网站av| 超碰亚洲97| 热热色AV| 成人性爱视频在线看| 天天看少妇| 97久久超碰国产精品| 欧美黄色片在线播放| 麻豆60秒| 中韩中文字幕在线观看| 韩国一级AAA| 情色五月天久久久| 美女91网站| 天天干美少妇一区| 亚洲伊人青青草| 性色生活片久久毛片婬片免费放女人一级毛片 | 精品国产一区二区三区久久久蜜臀| 五月天久久人妻| 啪啪AV导航| 99www.bibizy香蕉资源国产一区二区三区高清 | 日韩国产欧美伦理在线| 亚洲最大黄网| 国产97亚洲| 九九99精品视频在线观看| 日韩97精| 国产尤物AV尤物在线观看不卡| 日韩懂色网| 强被迫伦姧在线观看无码网站| 亚码激情| 国产精品扒开腿做爽爽爽视频| 天天色播| 国产精品一区二区三区在线| 欧美在线播放aaaa| 老熟妇一区二区三区| 久草免费在线一区二区| 色69大色97香蕉| 欧美特大黄一级片片免费| 欧美在线视频观看一二三四区高清| 人人操人人操人人操人人操人人操人人人11.CM| 人妻精品综合中文字幕在线| 精品一级毛片在线观看| 亚洲天堂另类小说男人| 成人五月天丁香激情综合| 一本正道久久熟女| 色哟哟综合| 欧美韩国你懂得在线 | 爱逼综合| 欧美日韩国产中文精品字幕自在自线,| 亚洲综合九九| 91大神电影天堂| 亚洲精品免费中文字幕| 麻豆精品三区视频| 99久久精品国产高潮| 97久操| 人妻少妇久久久| 亚洲国产综合视频| 精品十三区| 久久精品国产亚洲AV无码电影| 日本五区不卡| 男人的天堂2018东京热啪啪啪| 亚洲不卡三级手机播放| 婷婷另类小说| 免费的黄片wwwwww| 久久午夜色播影院免费高清| 中文字幕丝袜人妻| 日本性爱网址| 欧美日韩色| 九九九综合精品| 日韩亚洲中文字幕在线| 成人九九| 亚洲免费精品一区| 九九综合久久中文字幕| 91蜜桃传媒精品久久久一区二区| 久久精品人体| 亚洲成a人片在线观看中文!!!| 亚洲日精品| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 试看60秒| 五月天丁香| 欧美日韩黄片精品在线| 骚熟女AV网| 久久超碰免费的| 操逼逼无码| 13小男生GAY自慰脱裤子| 色香综合天天影视综合 | 日韩pv中文| 日本天天操| 九九无码| 日本亚欧爱爱| 神马久久久久久久久久| 日本免费中文一区二区三区四区 | 嗯~啊~快点 死我视频| 思思热影视| V A在线| 亚洲深夜福利| 亚洲性感丝袜诱惑在线观看| 91精品国产综合久久久蜜臀| 日韩AV一起草| 欧美日韩日产免费网站看| 九九草| 日本二区不卡| 久久少妇人妻| 91人妻视频| 男人的天堂亚洲| 国产精品久久久久综合| 国产美女自拍AV| 亚州综合网| 国产精品白丝www| 亚洲熟女偷拍在线观看| 99综合自拍| 日本免费一区二| 一本道综合色图| 婷婷中文网| 国产久久av| 日韩欧美成人午夜福利| 日韩欧美大片免费高清啪啪| 9118禁| 天天干18禁| 亚洲情色 自拍| 久久国产精品视频| 久久原创中文| 99re在线精品78| 日欧毛片久久| 99热 按摩 日韩| 久久精品视频在线观看| 久久熟妇五十路一区| 毛片17S| 久9久| 91天美传媒精品| 蜜桃在线观看一区二区三区 | 金典av| 天天天天天天天天综合| 久久超碰、| 久久亚洲不卡一区二区三区| 91最新综合| 日韩在线人妻网站| 色欲人妻一区二区在线| 天天看特黄的免费网站| 亚洲天堂自拍| 色欲色香天天天综合网www-亚洲综合国| 久草色悠悠在线视频| 久操 高清| 日本好吊色视频| 99re在线视频| 亚洲欧美内射| 欧美中日韩XXXX| 三级色影综合网| 啪啪自拍九九综合| 99九九久久| 成人片视频| 国产97/欧美| 夜夜欢天天干| 精品人妻一区二区三区四区石在线| 日本αv| 久久久99免费| 欧美日韩国产高清在线一二三区| 久久久免费的精品| 另类天堂| 三级片大波波| 熟女自慰久久久| 人妻黑丝袜电影| 亚洲精品蜜桃久久久| 60秒不遮不挡| 日韩人妻一区二区| 日韩操p| 午夜寂寞欧美| 啊啊啊不要好疼视频| 91最新综合| 日韩人人精品| 天美麻豆一区二区三区| 69视频入口| 蜜桃视频成a人v在线| 丁香六月婷| 久久精品国产99国产精品亚洲| 动漫区日韩区欧美区| 亚州欧美另类| A一区片| 人人操人人狠狠操| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 亚洲清纯唯美| 大香蕉久久| 无码日韩人妻av一| 欧美日韩丝袜| 亚洲国产中文字幕| 亚洲日韩精品一区二区| 欧美激情另类一区二区| 99性爱| 欧美午夜视频| 97亚洲综合影院| 一本大道不卡一二三区| 欧美另类色图片| 国产精品在线一区二区| 精品人妻中文字幕高清| av天堂5| 99色综合| 日韩精品系列| 欧美爱三级日韩久久| 天天日日夜夜| 欧美91色| 国产美女自拍AV| 国产精品大香蕉| 超碰97首页| 国产精品分类在线观看| 久久乐| 免费男人的天堂| 黄视频免费| 女人天堂AV五区在线| 日韩无码人妻中字久久三区四区| 亚洲好看强奸乱伦| 久久综合久久综合人久久夜精品| 亚洲天堂日本| 欧美色图综合| 黑丝少妇在线观看| 男人天堂无码| 你想操日本小逼吗| 久久亚洲人妻| 女人综合网| 久久婷婷五月| 久久精品无码熟妇一区二区三区视频导航 | 俄罗斯一区二区视频在线观看| 日韩有码免费视频| 婷婷丁香人妻 | 五月综合视频| 人妻丰满熟妇av无码区蜜桃| 亚洲国产精品无码AV在线| 91美女在线看| 欧美一区二区一级岛国大片| 久久精品人体| 97在线/亚洲| 欧美视频在线视频免费va| 日韩精彩视频| 日本高清有码网址视频| 日韩色女精品| 亚洲成人性| 精品无码人妻一区二区免费蜜桃| 内射小黄片| 神马久久久久久久久久久久| 无码不卡亚洲成?人片| 亚州成人a∨| 九九热av| 啊啊啊啊一区| 秋霞Av理论一级在线| 操九九九九九九| 久久成年片色大黄全免费网站| 婷婷啪啪| 天天操福利视频综合网站| 色综合尤物| 亚洲色天堂九9| 丁香六月啪| 蜜臀久久99精品久久久久久无删减| 黄网在线播放| 欧美性暴力猛交| 91亚·色| 日韩欧洲操屄视频| 欧美男人亚洲天堂| 久久香蕉国产线看观看猫咪av| 久污| 开心激情站| 97香蕉网| 大香蕉综合久久| 秋霞蝌科网日本一区| 黄色成年| 久久婷婷五月天| 国产精品96| 热热热热日日漂亮永久永久国产日| 欧美人妻精品一区二区| 日韩本不卡视频在线观看| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 91精品亚洲内射孕妇| 91色色综合| 操逼网站视频漫画国产| 欧州91高潮| 国产肏屁眼视频| 久久HD| 美日韩男女操屄视频| 动漫av中文| 日本免费人成视频播放120秒| 亚洲AV不卡在线观看| 女人爽到高潮久久久| 日韩欧美成人性爱在线| 亚洲欧美校园| 欧美成人亚洲精品| 韩三级a视频在线观看| 精品人妻伦一区二区三区久久| 日韩熟妇二区| 北约熟女超碰| www.91视频网| 久久一本大香蕉 | 欧美色乱| 加勒比五月天| 久久伊人在线五区| 欧美人人AAA| 色欲久久久久综合网| 九九九不卡| 九久9热| 丁香六月婷婷综合| 国产精品区在线12p| 99re免费| 免费男人的天堂| 美美91成人国产精品欧美精品久久久久久久| 啊啊啊啊免费视频| 色婷婷久久综合超碰| 人妻激情另类| 色色色色网站| 日韩av不卡在线看| 亚洲无 码A片在线观看麻豆| 本道在线| 18精品一区| 五月丁香婷婷色| 日韩精品免费高清视频在线| 国产精品午夜AV完会免费| 神马久久久久久| 狠狠操夜夜操蜜桃视频三区| 岛国1区2区3区在线观看| 99re视频在线播放青草| 欧洲亚洲人人爽爽视频| 日本一二三高清| 亚洲av夫妻操穴网| 婷婷久久大香蕉| 国产一区二区三区视频在线看| 少妇综合| 东京热天堂网| 亚洲色阁| 国产一线二线三线av| 久久精品一区二区三区蜜桃臀| 人妻一区久久二区三区色播| 99热这里是精品| 狠狠色婷婷777| 国产18精品亚洲精品| 日韩精品免费高清视频在线| 8x福利精品第一福利视频导航| 国产精品点击进入在线影院高清| 色97欧美| 九九精品网| 超碰色图| 中文字幕激情小说| 99热这里都是精品| 狠狠入| 国产精品在线免费| 欧美97se| 哈哈操 大香蕉| 精品人妻久久久| 欧美性夜| 天天综合-91入口| 亚洲欧美高清| 性色AV蜜色av色欲av| 加勒比中文av| 91老熟女视频| 午夜国产综合视频在线观看| 综合伊人激情| 加勒比在线观看一区二区| 上海一级黄片| 爱媛媛久久国产福利| 影视综合无码少妇|