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

ARTICLE DETAIL

資訊詳情

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

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

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