国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲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
返回資訊列表
www.色操逼| 啊啊啊好多水| 天堂综合网| 久久久96| 久久一级无码精品毛片6| 最新中文字幕在线亚洲| 天天操夜夜操| 蜜臀aV午夜一区二区三区| 欧日韩一二三f区| 国产无马在线| 婷婷丁香五月综合| 乱色老一区二区三区的观看方式| 一区二区高清视频| 国产精品青草综合久久| 亚洲1区| 天天干夜夜操一区二区| xxx亚洲午夜天堂| 视频在线观看免费一区二区三区| 欲色啪| 97爱爱爱综合| 狠狠色噜噜狠狠狠狠狠色综合久久| 东京太热久久久| 99九九久久| 欧美久久人人网| 中文字幕精品专区搜索结果91| 亚洲天天做日日做天天谢日日| 亚洲色图 91| 激情五月天婷婷| 日本一卡二区在线| 男人天堂.AB| 久久 亚洲 日韩 人妻| 亚洲加勒比色图| 日韩性爱视频免费在线| 91丨人妻丨国产丨丝袜| 99精品在线| 亚洲资源网| 精品夜夜澡人妻无码| 亚洲精品91| 东京热男人天堂| 日韩一级特黄av毛片| 中文字幕五区| 情色大香蕉| 国产精品无码av嫩草| 天美av在线观看| 亚州五月| 色综合色综合网| 亚洲熟女乱综合一区二区三区| 免费试看60秒| 四虎影视在线| 亚洲毛片基地专区| 婷婷五月天补不补| 欧美成人免费在线观看| 免费视频无码| 肏逼福利网站| 一区黄二区黄| 超碰97人人cao| 大香久久| 色色色色电影网| 国产精品天干天干综合网麻豆 | 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 亭亭丁香激情| 日本不卡一区二区| 久久免费中文字幕在线观看| 婷婷色网| 操逼免费视频无码国产| 天堂综合网| 综合大香蕉美。| 麻豆av一区二区三区| 精品欧美А∨无码黑人大荫蒂| 神马精品视频| 日本狂喷奶水在线播放212| 超碰这里只有精品| 嫖老熟女A片一二三区| chaopen97久久| 亚洲色鬼| 久久夜黄色无码A级大片| av日韩中文字幕| 夜夜高潮夜夜爽夜夜爱爱一区| 91操操操操| 天天综合日韩网| www九九热| 国产精品不卡一区二区三区| 午夜无码精品免费看性色| 国产夫妻性生活视频| 色啪网| 97天天操| 五十路熟女工口| 男人天堂最新手机版在线青青草| 天天日少妇逼AV| 好爽视频在线观看视频| 五月天伊人| 男人的天堂2018东京热啪啪啪| 欧美精品另类人妖xxxx| 国产400孕妇孕交群| 亚洲交换| 青青草亚洲一区| 亚洲欧美精品一区天堂久久| 超碰人人妻| 国产三级中文字幕粉嫩| 日韩色欲久久一二三四区| 欧美亚洲韩国视频十五区| 九草九九九| 中国和日本人色哪个不下载能放| 加勒比aⅴ| 免费A片三p视频| 亚洲精品人妻在线| 日韩性爱网址| 91麻豆天美国产| 色偷综合| 在线视频亚洲无码| 97爱爱影院| 強姦亂倫a| 美女啊啊啊啊pc| 国产9熟妇视频网站| 久久久久久久久久久久97 | 欧美综色欧| 无码操逼网| 欧美疯狂做爰xxxx| 超碰4A| 强奸乱伦资源| 久久久四区| 欧美十八禁在线看| 天天综合~91| 国产亚洲日本精品在线| 久草男人天堂| 午夜一区二区三区国产| 精品97久久综合| 免费久久一级毛片大黄| 伊人青青草久久| 91久久九九精品国产综合| 亚洲熟妇图片| 欧美日韩*字幕一区| 女人天堂AV五区在线| 色婷婷一区二区三区久久| 丁香色婷婷| 超碰色大香蕉| 1204av韩国| 国产隔壁老王影院在线| 色九九九综合| 久久精品店| 日本道人妻久久久在线不卡色视频| 欧美视频边做饭边橾| 久久久99999久网站| 国产精品99精品视频网站| 熟妇熟女一区二三区| 日本东京热久久久电影| 精品国产乱码久久久兰草影视| 内射老妇BBWX0C0CK| 久久一区,青青青青草视频在线播放| 中文字幕久久婷婷丁香五月天| 国产亚卅97| 欧美大香蕉同搞| 自拍啪啪视频| 国产suv精品一区二区四区999| 成 人 A V免费视频在线观看| 97精品国产97久久久久久户外免费| 中文字幕97| 欧美激情片一区二区| 伊人女女资源在线观看| 国产精品一区二区a| 久久久久久久78| 午夜福利免费精品视频| 久久午夜色播影院免费高清| 色天堂在线观看| 欧美成人午夜免费福利785| 男人天堂资源| 超碰在线第一页| 亚洲天堂区| 强奸乱伦AV一天堂网| 91碰碰| 久久久久久久久久久97| 国产真实野战在线视频| A级国产欧美激情在线| 嗯嗯啊啊的视频| 久久久久13| 天天躁日日躁xxxxx| 91黄射| 绯色AV粉色AV蜜臀AV| 亚洲国产欧美中文永久| 亚洲国产婷婷在线播放| 日本不卡二区| 男同专区一区二区三区在线| 欧美精品久久| 97超碰总站| 日韩乱码av| 久操婷婷| 免费强奸av| 国产无码精品高清| 亚洲日韩天堂| 91天堂网| 91亚洲色图| av影院十区| 亚洲国产精品久久久男人的天堂| 久久大香蕉手机高清视频| av资源在线播放天堂| 天天谢天天干| 国产乱色国产精品免费视| 91亚洲综合在线| 久久精品高清无码一区| 午夜福利一区二区影院| 999热这里只有精品| 欧美日韩97在线| 欧美夜色| 97爱啪| 国产视频第2页| 亚洲男人的天堂在线看| 一本一首道人妻少妇免费久久| 高潮内射在线| 麻豆一区在线| 午夜后入| 97视频一区| 限制级中的三级片中的黑粗大屌屌日人妻熟女 | www色婷婷| 色牛牛AV| 香蕉在线一区二区三区| 国产天天骚| 欧美亚男人的天堂| 熟女一区二区| 97超色| 欧美亚洲清纯| 欧美黑人熟妇精品91| 国产区在线| 综合色91| 中文字幕日韩专区精品系列 | 高跟丝袜AV专区国产| 91精品久久久久五月天精品| 欧美成人性爱视频免费观看| 在线国产探花| 成人综合网 欧美| 久久偷拍人| www.acm成人黄色毛片| 破处bbq| 舔人妻中文免费视频| 青草伊人网| 黄污污污污| 91n美女视频| 麻豆天美传媒在线视频天堂| yy少妇精品久久| 美女上床网站| av黄图片在线观看| 约操熟妇| 91视频国品一二三区| 人人操天天爽| 97欧美久久久久久久| 综合色区偷拍| 黄色av网站在线播放| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 午夜毛片高清免费不卡| 欧美日韩系列| 久久的免费性爱视频| 国产精品视频麻豆入口| 蜜臀久久99精品久久久久久久久| 日本一片一区| a啊啊啊啊啊啊啊啊一区二区| 国产极品馒头逼| 国产中文精品一区二区在线观看| 欧洲色色| 日韩少妇在线视频| 亚洲本色精品一区二区久久| 一区二区三区欧美激情| 国产精品网站www| 日韩欧美蜜桃精品久久中文字幕久久 | 精品小视频在线| 婷婷久久久精品| 最新av中文字幕高清| 欧美成va视频网站| 精品一区二区三区四区女| 国产日本顶级一区二区三区| 逼操网站| 超碰天天久久79| 97伊人| 91成人久久| 亚洲精品一二三四区| 99热线麻豆| 老熟女乱伦一区| 91黑丝在线播放| 伊人网青青| 欧美性天天影视| 97精品视频在线播放| 国产传媒午夜理伦精品| yazhousetuoumei| 日夜伊人网| 亚洲综合精品国产一区| 天天天天天超碰| 牛牛AV人人夜夜澡人人爽| www.婷婷五月天| 很狠操| 超97在线精品视频| 综合熟妇一区二区三区| 制服乱伦| 成人无码欧美一级A片狼牙直播| 人妻81p| 精品一久久久| 特级特黄一级毛片免费| 青娱乐大香蕉| 国产又猛又粗又爽又黄| 欧美狠狠弄| 在线日韩精品一区二区三区| 熟女啪啪视频| 91色插| 国产性久久久| 死我十八禁| 亚洲一区日韩精品中文字幕| 五月综合视频| 97色碰| 超碰久久性爱| 91精品久久久久五月天精品 | 99精品国产户外露出| 99久久com免费视频′| 啊啊啊啊啊好多水| 日日天天久久啊啊aaa| 国产又粗又大硬免费色网视频| 99青草| 肉动漫无遮挡h在线观看| 超碰调教97| 久久在线观看免费视频| 欧美色日本| 国产一区二区三三视频| 无码78| 9999免费精彩视频| 黄页| 东京成人一区| 国产综合永久精品日韩鬼片| 淫纸中9区| 中文字幕人妻丝袜| www..com操老师| 熟妇女伦乱视频视频| 丰满人妻一区二区三区| 少妇厨房愉情理伦片bd在线观看| 亚熟hd视频在线| 天堂8在线新版官网| 青青久草| 97精品国产精品免费观看| 天堂8在线新版官网| 老熟妇91| 亚洲人91| 欧美一区91大爱| 大香蕉免费3| 蜜桃丰满熟妇av无码区不卡| 欧洲天天在线| 天天视频黄网站| 99re9| 国产免费一区| 日韩紧密久久| 高清在线偷拍自拍视频| 蜜臀无码视频在线观看| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 无卡一区=区| 久热色情精品| 探花精品视频| 欧美大香蕉同搞| 91五十路| 97人人夜| 99re在线精品78| 青青草在线成人视频| 亚洲欧美在线观看2021 | 天天天天天天天天天天干美女| 神马麻豆福利院| 欧美97视频| 久久国产99精品72福利| 久7色| 久久久免费的精品| 国产探花日韩援交| 精品国产Av无码久久久伦古装| 啊啊啊好疼| 亚洲91网。| 亚洲av夫妻操穴网| 婷婷五月激情综合| 欧美顶级黄片AAAAA在线免费看| 国产亚洲精品一区二区三区| 国内外内射高清视频| 97超碰久| 日本天堂在线播放| 国产亚洲精品无码三区| 国产精品色哟哟| 国产 日韩 另类 视频一区爱| 深夜福利黄片| 999精品乱码| 正宗无毛一线天嫩逼| 欧美猛交黑寡妇中文字幕| 综合色图,成人综合网| 伊人久久大香大香线蕉中文| 两性色网| 欧美麻豆成人同性GⅤ在线| 大香蕉黄色一级片免费看| 激情小说在线视频| 欧美成人一级麻豆| 中文字幕国产在线天堂| 熟女探花啪啪| 91一区二区三区蜜桃| yiqicaoav| 精品人妻一区二区三区四区不卡在| 九九久久国产精品怡红院| 亚洲欧美综合网站| 欧美最大综合网| 日韩中文字幕2020| 一二三卡欧美日韩人妻免费精品| 欧美第二页午夜| 97超碰总站| 亚洲国产亚洲天堂| 亚洲骚男同com| 国产一区二区精品在线视频| 欧美综合综合| WWW.操逼.COM| 秋霞一级A片黄色视频| 懂色中文一区二区三区| 亚洲精品xxx| 日本三级R| 丁香五月天啪啪| 美女超碰978| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 91丨人妻丨国产丨丝袜| 欧美第一页| 国产精品美女久久久久久网站| yaouchengrenav| 欧美中文字幕日韩在线| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 亚洲丝袜色图| 九九九九免费视频| 女生91网站| 在线观看不卡一区二区三区| 色色色999| 富二代亚洲精品99| 1204人成网站色www| 999热这里只有精品| 婷婷伊人五月| 日本福利二区视频| 久草色悠悠在线视频| 日本孕妇孕交| 天天干天天舔| 五月丁香色情| 超碰是碰在线观看| 国产成年女黄特黄| 国产欧美一区激情交| 亚洲色欲一区二区三区| 国产精品一区二区三区在线| 国产操逼视频在线观看| 人妻熟女一区在| 一区二区三区成人| 国产又粗又大硬免费色网视频| 口爆吞精在线观看| 天堂日本亚洲欧美| 欧美丝袜91| 久久久久久久伊人精品| 国产精品久久久视频| 无码人妻丰满熟妇区毛片| 国模无码人体一区二区三| www.超碰| 91日日夜夜| 操www| 丁香五月天视频| 四虎精品一区| 国模不卡| 亚熟hd视频在线| 大香蕉欧美| 色婷婷av在线观看| 密臀成人视频久久久| 久操网无码在线| 97色插| 九九热国产| 久久精品亚洲成a人天堂| 另类亚洲图色| 色综合av综合久久| 国产精品久久久亚洲一区| 92大香蕉| 国产久久久久久久久一区二区| 97一区二区三区视频| 三级日韩一区二区三区| 精品人妻一区二区三区-国产| 中文字幕在线免费观看 | laoshunv91| 老司机午夜精品视频| 色香色香欲天天天影视综合网| 欧美色91| 亚洲高潮少妇| 精品九九九九九九| 91美女在线精品视频| 91观看 国产白丝| 狠狠色婷婷| 福利视频网站| 欧美高清性猛交| 欧美日韩国产成人高清| 无码人妻精品一区二区三区九九 | 免费97视频| 国产综合网站在线播放 | 精品夜夜澡人妻无码AV| 超碰在线香蕉| 色九九综合| 91GD.COM| 亚洲区 欧美区| 九九碰九九爱97超碰| 日韩91网| 中文字幕一区 二区三四五 区日 日骚| 99视频自拍区| 志村玲子视频一区二区| 成年人黄色视频免费| 黑丝日韩av丝袜av| 国产黄色 A 片免费看| 亚洲性感丝袜诱惑在线观看| 人人干人人操人人..com| AV天黑人| 欧洲免费一区二| 国内精品a| 夜夜夜夜爽| 无码自拍SM| 亚洲牲交| 9999久久久久| 欧美中文字幕男人天堂久久精品 | 亚洲国产精品无码AV在线| 在线 欧美 亚洲| 99re视频在线观看这里只有精品| 91久久久亚洲| 亚洲狠狠入| 天天摸天天插天天日| 久久精品国产亚洲妲己影视| 亚洲情色综合网| 色97| 日操粉逼逼| 伊人91| 亚洲综合射| 天美国产精品| 玖玖玖玖精品国产剧情| 欧美日韩在线视频网站| 国产精品美女| 东方亚洲在线操逼天堂| 性色乱AV一区二区| 五月婷婷综合激情| 国产剧情AV不卡在线观看| 91黑丝在线| yazhouzaixian| 久久有码| 久久久久久久久久久久久久9999| 亚洲 国产 精品一区| 一起草三级AV电影在线观看| 99精品综合久久久久五月天| 欧亚不卡| 99re6久热只有精品6在线直播 | 日日天天久久啊啊aaa| 成人黑料社久久| 九九九九九九视频免费| 国产精品色哟哟| 蜜臀AV成人精品蜜臀AV久久| 亚洲97资源| 天天天天做夜夜夜夜做| 久久久久久性爱视频| 天天干天天拍| 91色婷婷综合久久中文字幕二区| 欧美性爱三区二区| 中文字幕奈奈美被公侵犯| 欧美日本成人一区二区| 国产精品视频在线观看| 亚洲欧美97√| 97久久超碰日韩精品| 久久久精品一区二区| 欧美91网站| 99蜜桃臀亚洲成人在线观看| 亚洲永久永久永久永久一级一级一级精品| 97精彩视频网站| 懂色AV一区二区三区| 色999亚洲人成色| 成人综合久久精品色婷婷| 欧美人与性动交a美精品| 眼镜人妻101.com| 久久性爱视频99| 天天射天天操天天干天天吃2018 | 在线观看AV片| a v网站在线播放| 日韩一区二区高清在线观看的| 懂色av色欲av蜜臀av| 美国精品国产精品| 手机在线播放国产福利| 口爆吞精在线观看| 女人爽到高潮潮喷18禁网站| 日韩三级视频一区二区三区| 蜜臀久久一区二区| 综合干干干av久久久综合网| 欧美日本天堂| 日韩一级二级三级免费看完整版国语版| 使劲用力艹少妇视频一区二区| 夜精品久无码| 久久久久幕乱码| 国产后入式在线观看| 俞拍久久国应视频| 日韩一区二区精彩视频| 蜜乳AV一区| 福利在线黄片| 97资源超碰| 亚洲限制级| 亚洲色棕合| 久久青青草在线视频| 欧亚无码视频| 人人妻人射| 色综合久| 亚洲欧洲精品成人| 午夜精品久久久99热蜜桃的功能特点| 久久久女人| 国产一国产一级毛片古装| 无码操逼视频一下| 无遮挡h肉动漫在线观看| 大香蕉久久| 91久久午夜无码鲁丝片久久人妻| 亚州九九九精品视频| 久久久久久加勒比| 欧美日韩电影成人在线| 丁香六月啪啪| 一本一首道人妻少妇免费久久| 男人天堂最新手机版在线青青草| 久久久久97| 国产97视频免费观看| 九色97| 新精精品久久精品| 91精品老女人| 亚洲一区二区精品福利| 久久这里精品国产99丫e6| 亚洲国产亚洲天堂| 新亚洲无码| 亚洲欧美精品福利在线| 美女淫穴| 国产剧情在线| 黄片不用下载在线观看| 久久最新视频免费观看| 99av| 久久露脸国产老熟女| 美腿丝袜高跟网免费视频免费视频| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 久热色情精品| 久久线上视频免费看| 亚洲国产精品99久久久| 中文字幕二区日韩天堂| 欧美色交| 日本一本道A级黄色毛片试看60分钟| 精品射1999| 伊人网高清| 国产成人在线观看综合| 青青草日韩免费观看高清在线| 亚洲**2021在线观看| 精品妇女一区二区三区| 熟妇人妻一二三区免费| 国产一级作爱毛片| 亚熟hd视频在线| 青青青国产手线观看视频2| 国产精品一区人妻精品阁在线| 久久天堂网| 91人妻素女| 热久久国产精品视频大陆精品| 永久免费观看的毛片的网站| 久久久久成人蜜桃精品| 玖玖综合网| 五月天激情小说| 男人天堂新在线| 五月天综合网| 少妇熟女一区二区三区| 色噜噜综合网| 9久9久9久9久视频网站| 激情看片网站| 丰满人妻-区二区三区免费看| 色色色色电影网| 91插B网站| 激情久久av一区av二区av| 天天性射网| 亚洲色啪| 色妇综合网| 丰满人妻一区二区三区在线| CCYY草草影院地址入口| 欧美97在线观看| 国产精品熟女九色九色蜜臀| 亚州日韩97| 色一色综合网| 好吊色综合| 91色噜噜狠狠| 福利视频一区二区微拍| 综合熟妇一区二区三区| 国产久久一区二区午夜| 久久久久久亚洲Av无码精| 嗯嗯啊啊好疼| 婷婷五月综合在线| 国产强奸乱伦无码视频| 青青草成人视频在线观看二区| 强奸乱伦Av网| 怡红院成人视频| 亚洲一二三精品久久网| 欧美午夜一区二区三区| 夜夜欧美 | 老汉网| 色婷婷香蕉| 亚洲av性爱电影| 欧美亚洲宗合色性图| 99热婷婷| A 在线网址| 亚洲中文字幕久久无码精品| 91亚洲不卡一区| 浪人综合网| 精品九九九九| q2午夜理论片夜色av| 中文字幕黑人大片| 亚洲成a人片在线观看中文!!! | 中文字幕日韩综合| 九九九九九九亚洲| 欧美人妻久久精品二区三区| 国内一区二区免费| 俺也射| 很黄很污的免费网站| 久久久久国产一区二| 中日韩免费看男女操逼大全| 免费精品AB| 在线97在线| 狠狠干婷婷| 国产精品久久久久亚洲av| 91老女人| 亚洲天堂电影网99999| 久草精品国产蜜臀| 中文字幕高清20页视频| 国产成人无码高清| 亚欧免费| 搡老熟女免费视频| 99热销国产这里有精品| 大香蕉伊然在亚洲91| 熟妇人妻一区二区| 人妻少妇视频在线播放| 无码乱人伦中文视频| 久久久精品中文字幕爱豆| 91精品91久久久中77777| 亚洲九九视频在线观看| 粉嫩AV一区夜夜嗨| 精品v1区| 天天色悠悠激情| 另类图片五月天| 探花精品视频| 国产综合操逼高清| 日韩午夜精品一区二区三区电影| 亚洲高清无毛一区二区| 中文一区二区三区影院| 97天天日| 97超碰色色| 高清无码人妻久久久一区二区三区aⅴ| 在线电影亚洲色图| 色婷婷一区二区三区久久午夜成人不| 99只有精品| 色综和网| 97视频www| 夜草欧美| 99后入| 亚洲国产福利视频| 99超碰网| 蜜臀久久久99久久久久| v91av| 丰满人妻一区二区三区色-百度| 加勒比中文av| 91少妇| 精品国模无码| 免费黄色片。| 日韩亚洲中文字幕在线| av无码精品久久久久| 女人午夜视频777| 日本三级日本三级99| 婷婷色在线| 校园春色综合| 久久綜合很很很| 色网综合网| 91精品国产长腿丝袜美女| 天天综合~91| 亚洲乱妇p22| 久草尤物| 欧美日韩性爱无码| 一起草av| 亚洲五区熟女| 国产风韵犹存熟妇三区| 深喉吞精| 日本性感人妻91| 亚洲图片婷婷五月天| 日韩精品黄片免费观看| 天天综合精品| 青春草A| 五月天AV资源| 亚洲无992tv| 免费一级黄色录像影片| 亚洲国产一区二区三区四区国产| 99无码精品| 亚洲欧美日韩有码| 少妇熟女视频一区二区三区| 好爽视频在线观看视频 | 天天日天天爽| 丝袜无码a片| 久久99干一本高清| 麻豆国产精品午夜视频| 亚洲欧美日韩精品久| 欧美.亚洲.另类.丝袜.制服.诱惑| 绯色AV粉色AV蜜臀AV| 丰满熟女人妻一区二区三五十一路| 香蕉视频精品亚洲一区二区三区在线播 | 中文字幕av亚洲在线| 人人色97| 日日碰视频网| 超碰精品日韩欧美国产| 人妻精品一区二区在线| 欧美熟妇乱码在线一区| 天天搞欧美| 操逼无码操逼| 六月丁香婷| 自拍亚洲综合| yaouchengrenav| 99热最新| 老熟妇一区二区三区啪啪| 国产精品第一页国产大屁股视频免费区| 免费又黄又裸乳的视频| 热久久91婷婷| 久啪视频| 亚洲暴力强奸AV| 亚洲射综合网| 欧美综合另类| 久久99网站| 亚洲诱惑天堂 | 国产乱码久久| 啊啊啊操死我了| 亚洲精品xxx| av情色影音| 色妇综合网| 日韩九区| 欧美在线第五页| 日本一级婬片试看三分钟| 91N五十路| 久久激情婷婷| 99精品视频在线观看| 丰满少妇精品一区二区| 强奸乱伦Av网| 小骚逼被操的爽不爽| 伊人久久综合影院精品久久久 | 国产精品乱码久久久久| 玖玖色综合| 亚洲伊人青青草| 日本一区二区不卡精品| 欧美日动态视频| 免费αV在线视频| 日韩人妻操B| 亚洲综合第一页| 九色 人妻 大香蕉| 91爱网| 久久国色天香香蕉| 视频国产成人精品日本亚洲18| www.狠狠干.coom | 萌白酱自拍视频| 校园春色宗合网| 26uuu国产成人综合| 久湿久久 | 午夜免费视频1000| 婷婷爽人人婷婷爽视频| 国产精品天美传媒| 在线αⅴ| 久久99精品国产| 久久精品国产亚洲AV高级北京| 激情小说亚洲图片| 国产无套粉嫩白浆在| 丝袜美腿91| 一区二区你上我| 曰韩人妻中文字幕在线| 亚洲AO在线| 国产精品久久久久久照片| 97一区二区三区视频| 91人妻中文| 亚洲风情综合网| 人妻AV 中文字幕的| 男人亚洲天堂| 日日夜夜青青草母狗| 久操网无码在线| 久久精品一区一起草| 国产av尤物| 国产精品免费1区2区视频| 欧美91网站| 中文字幕黄色片| 亚洲影院成人| 久久视频少妇美女| 色色色热| 亚洲精品乱码线路中文字幕| 国产自啪精品视频网站黑丝| 95人妻爽爽人人做人人澡| 亚洲av综合伊人久久| 久久天堂网| 91色碰| 午夜电影在线观看无码专区| 淫淫综合网| 九九亚洲精品| 久久五月综合| 国产美女裸体秘 永久无遮挡| 91精品国| 爱啪精品一区| 99久久综合| 三级特黄60分钟播放| 青草精品视频一日本久久久久网站| 日韩精品高清资源在线| 日韩丝袜二区| 青青操网| 男人的天堂99| 久久伦理视频久久大香蕉视频| 亚洲精品久久久久久久蜜桃臀| 囯产精品久久久久久久久久梁医生 | 99久久久无码| 国产黄色av大片网站| AV九九| 国产日韩美女小穴视频网站不卡| 中文字幕精品人妻丝袜| 亚洲最新a在线观看| 1区2区3区视频| 亚洲一二三四区在线免费看视频 | 国产九九九九九九| 亚洲精品丝袜| 天天射影院| 色婷婷九月天天综合| 无码人妻精品一区二区三区99不卡| 欧美综合1性辶| 内射黑丝袜| 亚洲精品欧美专业| 天美精品av| 日韩成人综合网| 亚洲日韩美女中文字幕乱| 国语对白露脸XXXXXX| 久久精品超碰| 大香交| 久湿久久| 1024手机看片欧美日韩| 江都AV在线| 丁香六月婷婷久久综合| 粉嫩绯色AV一区二区在线| 午夜操逼不卡| 岛国福利在线精品播放| 日本不卡二区| 9Ⅰ老熟女| 亚洲自拍97| 蜜臀久久99精品久久久久久酒店| 久久影视二区三区行押| 亚洲人久久久网| 亚洲第91页| 999综合色| 亚州色国| 人妻少妇精品久久久| 欧美在线大香蕉| 欧美精品第四五页中文字幕在线观看| 91色艳| 久久久久骚| 日韩精彩免费| 亚洲av总站| 男人的天堂欧美| 久久超碰、| 男女91| 久久只有精品一区二区三区| 强上我不卡卡| 你草精品在线视频| 欧美后入视频| 亚洲啪啪啪啪视香蕉| 少妇激情AV| 精彩久久中文| 69久久| 天天综合中文字幕 91| 国产精品美女| 日本乱人伦片中文三区| 国产极品粉嫩馒头一线天av| 涩涩涩综合| 一级特级aaaa毛片免费观看| 欧美午夜一区二区三区| 久久婷婷综合国际产色怕| 啪啪综合网| 蜜臀精品1区2区| 2000亚洲男人天堂| 怡红院亚洲怡春院av| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 91高清无码下载| 91free福利| 九九热免费国产视频婷婷伊人| 亚洲人在线| 91人妻久久久久久久久久久久久| 精品免费成人久久| 毛片一区二区| 人人操人人搞人人草| 久操不卡视频| 爆乳免费黄网站| 骚女高跟AV在线| 欧美 亚洲精品首页| 丁香婷婷五月| 国产亚州高清国产拍精| 日韩久久三区| 久久m| 大香蕉中文在线| 成人麻豆av电影网站| 色啪网| 欧亚第一综合网| 亚洲激情深爱文学小说网站| 免费观看一区| 日本丝袜人妻内射| 国产最新AV| 果冻传媒一区二区三区| 中文久久| 亚洲一区中文字幕一区| 中文字幕丝袜人妻| 99色热| 国产精品区在线12p| 狠狠综合| 国外91| 日韩三级伦理中文字幕| 粉嫩在线一区二区懂色| 96爱综合| 四虎影视精品| 无码精品蜜桃一区二区三区ww| 日本久久久久久久久| 日韩av电影网站| 台湾一区国产高清在线| 狠狠穞A片一區二區三區| 青青欧洲黑| 精品人成视频在线观看| 久久久久9| 东京热熟女亚洲视频网站| 91老熟妇| 日本色色色| 韩日自拍| 国产精品亚洲一级av第二区| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 亚洲激情在线| 96久久久精品| 综合国产影视三级| 999日韩中文精品观看视频。| 超碰97极品9| 中文字幕aⅴ在线视频| 久草资源欧美在线视频| 69精品| 丁香五月天堂网| 综合网亚洲1| 欧美不卡二区| 国产精品suv一区| 无码久久国产| 97二区四区| 97资源久久| 99色综合| 日本欧美不卡| 色九九综合| 欧美色97| 色色操| 加勒比综合88| 91色情黑丝搞鸡在线观看一区二区三区三州| 超碰碰小说97| 国产亚洲色婷婷久久99精品91葵花宝典 | 日本天天干天天操一区| 狠狠色色| 青娱乐黄色录像| 丁香五月大香蕉| 春色91| 九九九九久久久| 在线观看中文字幕| 蜜桃久久久久久| 综合伊人网12色| 九九热超碰97亚洲最新香蕉| 国产精品4p在线观看| 18岁禁 茉莉成人久久| 日韩中文字幕精品一区在线| 麻豆一区在线| 精品国产乱码久久久久久口爆网站| 中国黄色特级精品一区二区三区片| 最好看的中文字幕在线2018| 91激情综合| 午夜福利成人免费视频| 97这里有精品| 在线啊啊啊啊| 日本 色 导航| 99最新日韩偷拍视频| 九九色色| 日韩福利电影网| 丰满精品人妻少妇久久字幕| xxx0国产在线播放| 精品人妻一区二区蜜桃视频| 天天天天操| 日本在线观看网址| 金典av| 久久久97| 国产精品懂色tv影视免费观看| 欧美白嫩在线放| 久草福利在线资源站| 熟妇人妻精品一区二区| 久久精品免费| 国产极品美女高潮无套在线观看| 蜜臀99久久精品久久久久久| 伊人影院中文字幕| 密乳AV免费观看| AV中文字幕三四五| 欧美黄色图片| 亚洲色图亚洲无码强奸乱伦| 好属操| 欧洲自拍色图gif在线| 在线99热| 国产精品久久久无码aV去| 色亚州人久干视频在线观看免费版| 久久婷婷五月天| 伦激情人妻另类人妻| 丝袜视频网国产90| 欧美日韩资源在线| 精品人妻美妇91job| 亚州熟女乱伦| 欧美淫乱视频| av操操不卡| www色色色com| 欧美性爱日韩性爱| 神马麻豆福利院| 九九热精彩视频| 麻豆天美国美国产| 多乙久久久久久| 干我久操| 人人操人人摸超碰| 少妇专区一二三四五| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 欧美 亚洲精品首页| 男人精品天堂一区| 成人影 天天操 亚洲| 日本污ww视频网站| 欧美1区二区三区公司| 国产91 丝袜在线播放00-百度| 91路www| 欧美有码亚洲中文字幕一区二区三区四区| 国产精品爽爽va在线观看98| 无码137片内射在线影院| 精品国产乱码久久久| 欧洲精品久久| 区一二区日韩亚洲乱码av电影| 五月婷婷六月天| 极品粉嫩一区二区| 操屄不卡视频| 亚洲三区视频| 免费人成毛片乱码| 欧美性爱超碰97| 亚洲欧美日韩中文久久自慰| 天天日日本| 久久大香蕉手机高清视频| 色色婷婷丁香| 久久精品国产96精品亚洲拳交| 看免费的黄片| 色色毛片| 亚洲欧美另类激情小说| 四方色播| 美女91在线| 久久免费9| 日本在线伊人啪啪| 人妻熟妇一区二区三区| 骚鸭AV| 国内精品久9| 国产91丝袜在线播放蜜月| 亚洲色图 图片| 色老牛| 亚洲宗合网| 91女优在线观看 | 国产女人成人精品视频| 色一色综合网| 成人三级片无码| 天天日天天干天天整| 国产树林里野战在线看| 五月天黄色激情视频| wwwcaobibi| 中文字幕日本久久| 五月婷婷AV| 麻豆人妻精品一区二区| 五月激情综合网| 蜜臀久久久久久999| 国产女上位好爽在线| 国产自产91区13区| 中文字幕乱码人妻一区二区三区,99精品 | 操逼内射干逼白丝91|