欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

WebGL加速瀏覽器端神經(jīng)網(wǎng)絡(luò)訓(xùn)練:從矩陣乘法到反向傳播的完整實(shí)現(xiàn)

WebGL加速瀏覽器端神經(jīng)網(wǎng)絡(luò)訓(xùn)練:從矩陣乘法到反向傳播的完整實(shí)現(xiàn) 1. 從一次“離譜”的需求說起為什么要在瀏覽器里訓(xùn)練神經(jīng)網(wǎng)絡(luò)前陣子有個(gè)做在線教育工具的朋友找我說他們想做一個(gè)“手寫數(shù)字識別”的互動(dòng)教學(xué)頁面學(xué)生用鼠標(biāo)在畫布上寫個(gè)數(shù)字頁面立刻告訴他是幾。聽起來簡單但他們的約束條件很苛刻不能有后端推理服務(wù)不能依賴云端API所有計(jì)算必須在用戶打開網(wǎng)頁的那一瞬間就準(zhǔn)備好而且還得支持“現(xiàn)場教學(xué)微調(diào)”——也就是學(xué)生可以自己補(bǔ)充幾個(gè)樣本讓模型當(dāng)場學(xué)一下識別效果立刻變好。這個(gè)需求翻譯成技術(shù)語言就是在瀏覽器端完成神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和推理。注意是訓(xùn)練不只是推理。推理在瀏覽器里跑早就不新鮮了用ONNX Runtime Web或者TensorFlow.js加載一個(gè)預(yù)訓(xùn)練模型前向傳播一下這事很多年前就能做。但訓(xùn)練意味著反向傳播、梯度計(jì)算、參數(shù)更新計(jì)算量比推理大得多而且要在用戶設(shè)備上跑不能把瀏覽器卡死。我當(dāng)時(shí)的第一個(gè)反應(yīng)是用CPU跑JavaScript別鬧了。一個(gè)兩層全連接網(wǎng)絡(luò)在MNIST上訓(xùn)練純JS循環(huán)跑一輪epoch可能要幾十秒用戶體驗(yàn)直接崩掉。第二個(gè)反應(yīng)是WebAssembly能快一些但WASM本身不直接支持SIMD并行矩陣運(yùn)算除非你自己手寫SIMD指令開發(fā)成本極高。第三個(gè)反應(yīng)也是最終落地的方案WebGL。WebGL的本質(zhì)是什么很多人第一反應(yīng)是“畫3D圖形的”。沒錯(cuò)但更底層地看WebGL是一套在GPU上執(zhí)行并行計(jì)算的接口。它把數(shù)據(jù)組織成紋理把計(jì)算邏輯寫成著色器程序然后讓GPU的幾千個(gè)核心同時(shí)跑。神經(jīng)網(wǎng)絡(luò)的訓(xùn)練核心就是大規(guī)模矩陣乘法和逐元素運(yùn)算這恰好是GPU最擅長的事情。所以用WebGL來加速瀏覽器端神經(jīng)網(wǎng)絡(luò)訓(xùn)練不是“能不能”的問題而是“怎么把神經(jīng)網(wǎng)絡(luò)的計(jì)算圖映射到WebGL的渲染管線上”的問題。這篇文章我就把這條路徑完整拆開講一遍。從GPU為什么適合做這件事到怎么把矩陣乘法寫成著色器到反向傳播怎么在WebGL里落地再到實(shí)際跑起來會踩哪些坑。如果你正在考慮把模型訓(xùn)練搬到瀏覽器端或者單純好奇“網(wǎng)頁里怎么跑神經(jīng)網(wǎng)絡(luò)”這篇內(nèi)容應(yīng)該能給你一套可復(fù)現(xiàn)的思路。2. GPU的并行邏輯為什么矩陣乘法在WebGL里能快幾十倍2.1 從CPU的“串行思維”切換到GPU的“并行思維”先建立一個(gè)直覺。假設(shè)你要計(jì)算兩個(gè)矩陣相乘A是1000×1000B也是1000×1000結(jié)果C是1000×1000。用CPU做你會寫三層循環(huán)外層遍歷C的行中層遍歷C的列內(nèi)層做點(diǎn)積??偣惨?0億次乘加運(yùn)算?,F(xiàn)代CPU大概有8到16個(gè)核心每個(gè)核心同一時(shí)刻只能處理一個(gè)乘加不考慮指令級并行所以理論上要跑幾億個(gè)時(shí)鐘周期。GPU不一樣。一塊普通的集成顯卡也有幾百個(gè)著色器核心獨(dú)立顯卡更是幾千個(gè)。這些核心可以同時(shí)執(zhí)行相同的指令只是處理不同的數(shù)據(jù)。矩陣乘法里C的每一個(gè)元素都是獨(dú)立的互不依賴。這意味著你可以把C的100萬個(gè)元素分配給GPU的幾千個(gè)核心每個(gè)核心算幾百個(gè)元素并行度直接拉滿。但這里有個(gè)關(guān)鍵限制GPU的并行是SIMD式的同一批核心在同一時(shí)刻必須執(zhí)行相同的指令。你不能讓核心A去做乘法核心B去做加法核心C去讀內(nèi)存。所以寫WebGL著色器時(shí)你的思維要變成“我要對每一個(gè)像素或每一個(gè)數(shù)據(jù)元素執(zhí)行同一套操作只是輸入數(shù)據(jù)不同?!?.2 WebGL的渲染管線如何變成計(jì)算管線WebGL的標(biāo)準(zhǔn)用法是你提供頂點(diǎn)數(shù)據(jù)頂點(diǎn)著色器處理每個(gè)頂點(diǎn)然后光柵化片段著色器處理每個(gè)像素最后寫入幀緩沖。這套流程里片段著色器是最適合做通用計(jì)算的階段因?yàn)樗鼘γ總€(gè)像素獨(dú)立執(zhí)行天然并行。要把矩陣乘法映射進(jìn)去做法是這樣的把矩陣A和矩陣B分別編碼成紋理。紋理的每個(gè)像素存儲一個(gè)浮點(diǎn)數(shù)或者用RGBA四個(gè)通道存四個(gè)數(shù)。創(chuàng)建一個(gè)和輸出矩陣C同樣大小的幀緩沖作為渲染目標(biāo)。寫一個(gè)片段著色器對于輸出紋理上的每一個(gè)像素位置(i, j)計(jì)算A的第i行和B的第j列的點(diǎn)積。用一次繪制調(diào)用drawArrays或drawElements觸發(fā)整個(gè)計(jì)算。這里有個(gè)細(xì)節(jié)片段著色器不能直接“讀取”另一個(gè)紋理的任意位置嗎可以用texture2D函數(shù)傳入歸一化的紋理坐標(biāo)。但要注意紋理坐標(biāo)是0到1的浮點(diǎn)數(shù)你需要把整數(shù)索引轉(zhuǎn)換成歸一化坐標(biāo)。比如要讀A的第k列坐標(biāo)就是(k 0.5) / width加0.5是為了采樣到像素中心。一次繪制調(diào)用就能算出整個(gè)C矩陣。1000×1000的矩陣乘法在GPU上就是渲染一個(gè)1000×1000的矩形每個(gè)像素做1000次乘加。GPU的幾千個(gè)核心同時(shí)跑實(shí)際耗時(shí)可能在幾毫秒到幾十毫秒之間比CPU快兩個(gè)數(shù)量級。2.3 精度問題WebGL的浮點(diǎn)數(shù)夠用嗎這是很多人會忽略的坑。WebGL 1.0的片段著色器默認(rèn)使用mediump精度也就是16位浮點(diǎn)數(shù)范圍大約±65504精度只有10位尾數(shù)。用來做神經(jīng)網(wǎng)絡(luò)訓(xùn)練梯度值很容易下溢到0或者上溢到Infinity。訓(xùn)練直接崩掉。解決方案有兩個(gè)第一在著色器里顯式聲明highp精度。precision highp float;這樣可以用到32位浮點(diǎn)數(shù)具體取決于GPU實(shí)現(xiàn)但大多數(shù)現(xiàn)代設(shè)備支持。highp的范圍和精度足夠覆蓋神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的數(shù)值。第二如果設(shè)備不支持highp一些老舊的移動(dòng)GPU可以考慮用“分塊計(jì)算”或者“縮放因子”來規(guī)避。比如把梯度乘以一個(gè)大的常數(shù)計(jì)算完再除回來。但這會增加復(fù)雜度實(shí)際項(xiàng)目中我建議直接檢測設(shè)備能力不支持highp就降級到CPU路徑。還有一個(gè)隱藏問題WebGL的紋理格式。默認(rèn)的RGBA紋理每個(gè)通道8位只能存0到255的整數(shù)。要存浮點(diǎn)數(shù)必須使用OES_texture_float擴(kuò)展把紋理內(nèi)部格式設(shè)為gl.FLOAT。這個(gè)擴(kuò)展在現(xiàn)代瀏覽器上支持率很高但還是要做特性檢測。3. 把神經(jīng)網(wǎng)絡(luò)拆成WebGL能吃的“圖形任務(wù)”3.1 全連接層的前向傳播一次矩陣乘法加一次激活假設(shè)你有一個(gè)簡單的全連接層輸入向量x維度n權(quán)重矩陣W維度m×n偏置b維度m輸出y activation(Wx b)。在WebGL里這一步可以拆成兩個(gè)渲染過程第一個(gè)過程算z Wx b。把W編碼成紋理x編碼成另一個(gè)紋理或者直接作為uniform數(shù)組傳入如果n不大的話。輸出z是一個(gè)m維向量可以渲染成一個(gè)m×1的紋理。片段著色器里對于輸出紋理的第i個(gè)像素計(jì)算W的第i行和x的點(diǎn)積再加上b[i]。第二個(gè)過程算y activation(z)。這是一個(gè)逐元素操作直接把z紋理作為輸入渲染到y(tǒng)紋理。著色器里對每個(gè)像素應(yīng)用激活函數(shù)比如ReLU就是max(0, z)Sigmoid就是1/(1exp(-z))。這里有個(gè)優(yōu)化點(diǎn)如果網(wǎng)絡(luò)有多層可以把中間結(jié)果一直保留在紋理里不需要讀回CPU。每一層的輸出紋理直接作為下一層的輸入紋理。這樣整個(gè)前向傳播就是一系列繪制調(diào)用數(shù)據(jù)始終在GPU顯存里流轉(zhuǎn)避免了PCIe總線的來回拷貝。3.2 反向傳播的鏈?zhǔn)椒▌t在著色器里怎么表達(dá)反向傳播是訓(xùn)練的核心也是最難映射到WebGL的部分。核心公式是對于每一層先算輸出的梯度dL/dz然后算權(quán)重的梯度dL/dW dL/dz * x^T輸入的梯度dL/dx W^T * dL/dz。在WebGL里dL/dz的計(jì)算通常涉及逐元素乘法比如ReLU的導(dǎo)數(shù)就是z0?1:0和dL/dy逐元素相乘。這個(gè)可以寫成一個(gè)片段著色器輸入是dL/dy紋理和z紋理輸出是dL/dz紋理。dL/dW的計(jì)算是一個(gè)外積dL/dz是m維x是n維外積得到m×n的矩陣。這個(gè)可以映射成一次矩陣乘法把dL/dz當(dāng)作列向量x當(dāng)作行向量。輸出紋理的大小是m×n每個(gè)像素(i,j)的值是dL/dz[i] * x[j]。這個(gè)計(jì)算很簡單但要注意紋理的布局——WebGL紋理是二維的你需要決定怎么把一維向量和二維矩陣對應(yīng)起來。dL/dx的計(jì)算是W^T乘以dL/dz這是一個(gè)矩陣向量乘法。W^T是n×mdL/dz是m維結(jié)果是n維。這個(gè)可以復(fù)用前面矩陣乘法的著色器只是把W的紋理轉(zhuǎn)置一下或者在著色器里交換索引。實(shí)際實(shí)現(xiàn)時(shí)我建議把每一層的反向傳播拆成三個(gè)獨(dú)立的渲染過程算dL/dz、算dL/dW、算dL/dx。每個(gè)過程一個(gè)著色器程序輸入輸出都是紋理。這樣邏輯清晰調(diào)試也方便。3.3 參數(shù)更新在GPU上做還是回CPU做參數(shù)更新是W W - learning_rate * dL/dW。這個(gè)操作本身很簡單逐元素減法。但問題在于更新后的W需要作為下一輪前向傳播的輸入。如果W一直留在GPU紋理里那更新也可以在GPU上做寫一個(gè)片段著色器輸入W紋理和dL/dW紋理輸出新的W紋理。但這里有個(gè)權(quán)衡。如果所有參數(shù)都在GPU上你就沒法方便地查看訓(xùn)練過程中的權(quán)重變化也沒法做復(fù)雜的優(yōu)化器比如Adam需要維護(hù)一階矩和二階矩計(jì)算量不大但邏輯稍復(fù)雜。我的做法是前向和反向在GPU上跑參數(shù)更新回CPU做。每一輪迭代結(jié)束后把dL/dW從GPU讀回CPU用readPixels在JavaScript里更新權(quán)重再把新權(quán)重上傳到GPU紋理。這樣雖然多了兩次數(shù)據(jù)傳輸?shù)`活性大大提高而且對于小網(wǎng)絡(luò)來說傳輸開銷遠(yuǎn)小于計(jì)算開銷。讀回?cái)?shù)據(jù)時(shí)要注意readPixels是同步操作會阻塞渲染管線。如果每輪都讀可能會成為瓶頸。優(yōu)化方法是批量讀——積累幾輪的梯度再一起讀回或者用WebGL 2.0的PBO像素緩沖對象做異步讀回。但WebGL 2.0的兼容性還不如1.0實(shí)際項(xiàng)目中要權(quán)衡。4. 手寫一個(gè)WebGL神經(jīng)網(wǎng)絡(luò)訓(xùn)練器的完整路徑4.1 環(huán)境搭建與基礎(chǔ)工具函數(shù)首先你需要一個(gè)WebGL上下文。創(chuàng)建一個(gè)canvas獲取gl對象。然后檢查必要的擴(kuò)展const canvas document.createElement(canvas); const gl canvas.getContext(webgl); const floatExt gl.getExtension(OES_texture_float); if (!floatExt) { throw new Error(設(shè)備不支持浮點(diǎn)紋理無法進(jìn)行GPU訓(xùn)練); }接下來是幾個(gè)基礎(chǔ)工具函數(shù)這些函數(shù)會反復(fù)用到創(chuàng)建浮點(diǎn)紋理輸入是一個(gè)Float32Array輸出是一個(gè)WebGL紋理對象。注意設(shè)置紋理參數(shù)為NEAREST采樣避免插值導(dǎo)致數(shù)值錯(cuò)誤。function createFloatTexture(gl, data, width, height) { const texture gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texture); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.FLOAT, data); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); return texture; }創(chuàng)建幀緩沖幀緩沖是渲染目標(biāo)你把片段著色器的輸出寫進(jìn)去。每個(gè)幀緩沖綁定一個(gè)紋理作為顏色附件。function createFramebuffer(gl, texture) { const fb gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER, fb); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); return fb; }編譯著色器程序這是標(biāo)準(zhǔn)流程編譯頂點(diǎn)著色器和片段著色器鏈接成程序。頂點(diǎn)著色器通常很簡單就是傳遞一個(gè)覆蓋整個(gè)畫布的矩形。function createProgram(gl, vertexSource, fragmentSource) { const vs gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vs, vertexSource); gl.compileShader(vs); const fs gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fs, fragmentSource); gl.compileShader(fs); const program gl.createProgram(); gl.attachShader(program, vs); gl.attachShader(program, fs); gl.linkProgram(program); return program; }這些工具函數(shù)看起來簡單但每個(gè)都有坑。比如紋理的寬高必須是2的冪嗎在WebGL 1.0里如果使用NEAREST采樣和CLAMP_TO_EDGE可以不是2的冪。但有些驅(qū)動(dòng)會強(qiáng)制要求所以最安全的做法是padding到2的冪。我一般會把矩陣維度補(bǔ)齊到最近的2的冪比如1000×1000的矩陣實(shí)際分配1024×1024的紋理多出來的部分填0。4.2 矩陣乘法著色器的逐行拆解矩陣乘法是整個(gè)訓(xùn)練流程里最核心的計(jì)算。假設(shè)我們要算C A × BA是M×KB是K×NC是M×N。頂點(diǎn)著色器很簡單就是畫一個(gè)覆蓋整個(gè)輸出紋理的矩形attribute vec2 a_position; void main() { gl_Position vec4(a_position, 0.0, 1.0); }片段著色器是重點(diǎn)precision highp float; uniform sampler2D u_A; uniform sampler2D u_B; uniform vec2 u_A_size; // (M, K) uniform vec2 u_B_size; // (K, N) uniform vec2 u_C_size; // (M, N) void main() { vec2 c_pos gl_FragCoord.xy; // 當(dāng)前像素在C中的位置 float sum 0.0; for (int k 0; k int(u_A_size.y); k) { // 讀A的第c_pos.x行第k列 vec2 a_uv vec2((c_pos.x 0.5) / u_A_size.x, (float(k) 0.5) / u_A_size.y); float a_val texture2D(u_A, a_uv).r; // 讀B的第k行第c_pos.y列 vec2 b_uv vec2((float(k) 0.5) / u_B_size.x, (c_pos.y 0.5) / u_B_size.y); float b_val texture2D(u_B, b_uv).r; sum a_val * b_val; } gl_FragColor vec4(sum, 0.0, 0.0, 1.0); }這段代碼有幾個(gè)關(guān)鍵點(diǎn)第一gl_FragCoord.xy給出的是像素中心坐標(biāo)比如第一個(gè)像素是(0.5, 0.5)。所以計(jì)算紋理坐標(biāo)時(shí)要加0.5再除以尺寸。第二循環(huán)次數(shù)必須是常量或者可以用uniform控制。WebGL 1.0的GLSL不允許非常量循環(huán)邊界但可以用一個(gè)足夠大的常量循環(huán)然后在循環(huán)體內(nèi)用if判斷是否超出范圍。不過現(xiàn)代瀏覽器對動(dòng)態(tài)循環(huán)的支持已經(jīng)不錯(cuò)了實(shí)際測試中大多數(shù)設(shè)備都能跑。第三每次循環(huán)要讀兩次紋理。紋理讀取是GPU計(jì)算中最慢的操作之一因?yàn)橐L問顯存。優(yōu)化方法是把A和B的紋理綁定到不同的紋理單元并且盡量讓循環(huán)內(nèi)的訪問模式有局部性。但矩陣乘法的訪問模式天然是跳躍的所以這個(gè)優(yōu)化空間有限。一個(gè)實(shí)用的優(yōu)化技巧分塊計(jì)算。把大矩陣切成小塊比如32×32的塊每個(gè)塊的計(jì)算可以更好地利用GPU的緩存。但這會增加著色器的復(fù)雜度實(shí)際項(xiàng)目中如果矩陣不大比如全連接層通常幾百維直接算就夠了。4.3 激活函數(shù)與損失函數(shù)的GPU實(shí)現(xiàn)激活函數(shù)是逐元素操作實(shí)現(xiàn)起來簡單。以ReLU為例precision highp float; uniform sampler2D u_input; void main() { vec2 uv gl_FragCoord.xy / vec2(textureSize(u_input, 0)); float val texture2D(u_input, uv).r; gl_FragColor vec4(max(0.0, val), 0.0, 0.0, 1.0); }Sigmoid稍微復(fù)雜一點(diǎn)因?yàn)橐鉫xpfloat sigmoid(float x) { return 1.0 / (1.0 exp(-x)); }但要注意exp函數(shù)在highp下可能會有精度問題特別是當(dāng)x很大或很小時(shí)。一個(gè)穩(wěn)定的實(shí)現(xiàn)是float stable_sigmoid(float x) { if (x 0.0) { return 1.0 / (1.0 exp(-x)); } else { float e exp(x); return e / (1.0 e); } }損失函數(shù)通常用交叉熵。對于分類問題交叉熵的梯度是softmax輸出減去真實(shí)標(biāo)簽。這個(gè)計(jì)算可以放在CPU做因?yàn)橹簧婕拜敵鰧佑?jì)算量小。但如果想全GPU化也可以寫一個(gè)著色器輸入是預(yù)測概率和真實(shí)標(biāo)簽輸出是每個(gè)樣本的損失值。4.4 反向傳播的著色器實(shí)現(xiàn)細(xì)節(jié)反向傳播里最復(fù)雜的是dL/dW的計(jì)算。假設(shè)當(dāng)前層的輸入是xn維輸出梯度是dL/dzm維那么dL/dW是一個(gè)m×n的矩陣每個(gè)元素是dL/dz[i] * x[j]。這個(gè)計(jì)算可以寫成一個(gè)著色器輸出紋理大小是m×nprecision highp float; uniform sampler2D u_dz; // m維向量存成m×1紋理 uniform sampler2D u_x; // n維向量存成n×1紋理 uniform vec2 u_dz_size; uniform vec2 u_x_size; void main() { vec2 pos gl_FragCoord.xy; // pos.x是行索引ipos.y是列索引j vec2 dz_uv vec2(0.5 / u_dz_size.x, (pos.x 0.5) / u_dz_size.y); vec2 x_uv vec2(0.5 / u_x_size.x, (pos.y 0.5) / u_x_size.y); float dz_val texture2D(u_dz, dz_uv).r; float x_val texture2D(u_x, x_uv).r; gl_FragColor vec4(dz_val * x_val, 0.0, 0.0, 1.0); }注意這里紋理坐標(biāo)的寫法。因?yàn)閐z和x都是一維向量我習(xí)慣把它們存成寬度為1、高度為維度的紋理。這樣讀取時(shí)x坐標(biāo)固定為0.5/width即像素中心y坐標(biāo)根據(jù)索引變化。dL/dx的計(jì)算是W^T × dL/dz。W是m×nW^T是n×mdL/dz是m維結(jié)果是n維。這個(gè)可以復(fù)用矩陣乘法的著色器只需要把W的紋理坐標(biāo)交換一下?;蛘邔懸粋€(gè)專門的著色器precision highp float; uniform sampler2D u_W; // m×n uniform sampler2D u_dz; // m維 uniform vec2 u_W_size; uniform vec2 u_dz_size; void main() { float i gl_FragCoord.y; // 輸出向量的索引 float sum 0.0; for (int j 0; j int(u_W_size.x); j) { vec2 w_uv vec2((float(j) 0.5) / u_W_size.x, (i 0.5) / u_W_size.y); float w_val texture2D(u_W, w_uv).r; vec2 dz_uv vec2(0.5 / u_dz_size.x, (float(j) 0.5) / u_dz_size.y); float dz_val texture2D(u_dz, dz_uv).r; sum w_val * dz_val; } gl_FragColor vec4(sum, 0.0, 0.0, 1.0); }這里W的讀取是W[j][i]因?yàn)槲覀円鉝^T的第i行也就是W的第i列。所以w_uv的x坐標(biāo)是j行索引y坐標(biāo)是i列索引。這個(gè)索引交換很容易搞混寫的時(shí)候要特別小心。5. 實(shí)測中那些文檔不會告訴你的坑5.1 紋理尺寸限制與矩陣分塊策略WebGL有一個(gè)硬性限制MAX_TEXTURE_SIZE。這個(gè)值在不同設(shè)備上不一樣低端手機(jī)可能只有2048高端顯卡能到16384。如果你的權(quán)重矩陣超過這個(gè)尺寸就必須分塊。分塊矩陣乘法的思路是把A切成若干行塊B切成若干列塊然后逐塊計(jì)算。每個(gè)塊的計(jì)算結(jié)果寫到一個(gè)臨時(shí)紋理最后拼起來。但這樣會增加繪制調(diào)用次數(shù)和紋理切換開銷。我的經(jīng)驗(yàn)是對于全連接層權(quán)重矩陣通常不會超過4096×4096那已經(jīng)是1600萬參數(shù)了所以大多數(shù)設(shè)備都能直接放下。但如果做卷積層特征圖可能很大就需要分塊。實(shí)際項(xiàng)目中我建議先檢測MAX_TEXTURE_SIZE如果矩陣維度超過限制就自動(dòng)降級到CPU計(jì)算或者用分塊策略。還有一個(gè)隱藏限制MAX_RENDERBUFFER_SIZE和MAX_VIEWPORT_DIMS。這些通常和紋理尺寸限制一致但有些設(shè)備上幀緩沖的尺寸限制更嚴(yán)格。創(chuàng)建幀緩沖后一定要檢查checkFramebufferStatus確保返回FRAMEBUFFER_COMPLETE。5.2 浮點(diǎn)紋理的讀寫精度陷阱前面提到要用OES_texture_float擴(kuò)展。但即使擴(kuò)展存在不同設(shè)備對浮點(diǎn)紋理的支持程度也不一樣。有些設(shè)備只能渲染到浮點(diǎn)紋理但不能讀取有些設(shè)備讀取時(shí)會有精度損失。一個(gè)實(shí)用的檢測方法是創(chuàng)建一個(gè)浮點(diǎn)紋理寫入一個(gè)已知值比如0.123456789然后讀回來看精度是否滿足要求。如果誤差超過1e-6就說明這個(gè)設(shè)備的浮點(diǎn)紋理不可靠需要降級。另外readPixels讀回浮點(diǎn)數(shù)據(jù)時(shí)返回的是Float32Array。但有些設(shè)備會返回Uint8Array即使你請求的是浮點(diǎn)格式。所以讀回后要檢查數(shù)據(jù)類型必要時(shí)做轉(zhuǎn)換。還有一個(gè)坑WebGL的texImage2D在傳入Float32Array時(shí)如果數(shù)據(jù)長度和width×height×4不匹配會靜默失敗或者產(chǎn)生未定義行為。一定要確保數(shù)據(jù)長度正確。我習(xí)慣在創(chuàng)建紋理前先算好width * height * 4然后檢查數(shù)組長度。5.3 訓(xùn)練不收斂的排查鏈路GPU訓(xùn)練最讓人頭疼的問題是訓(xùn)練不收斂但你看不到中間過程。CPU訓(xùn)練時(shí)你可以打印每一層的梯度、權(quán)重但GPU上數(shù)據(jù)都在紋理里讀回來很麻煩。我總結(jié)了一套排查鏈路第一步檢查前向傳播。用一個(gè)已知的輸入手動(dòng)算一遍CPU版本的前向結(jié)果然后和GPU版本對比。如果前向就不對那反向肯定不對。對比時(shí)要注意精度GPU的浮點(diǎn)運(yùn)算和CPU可能有微小差異但應(yīng)該在1e-5以內(nèi)。第二步檢查梯度。用數(shù)值梯度法驗(yàn)證對于某個(gè)權(quán)重w計(jì)算Loss(wε)和Loss(w-ε)然后(Loss(wε)-Loss(w-ε))/(2ε)就是數(shù)值梯度。和GPU算出的梯度對比如果差異大說明反向傳播有問題。第三步檢查參數(shù)更新。如果梯度對了但Loss不下降可能是學(xué)習(xí)率太大或太小。GPU訓(xùn)練時(shí)梯度值可能因?yàn)榫葐栴}被截?cái)鄬?dǎo)致實(shí)際學(xué)習(xí)率和設(shè)定值不符??梢韵劝褜W(xué)習(xí)率調(diào)小10倍試試。第四步檢查數(shù)據(jù)。有時(shí)候問題不在GPU而在輸入數(shù)據(jù)。比如標(biāo)簽編碼錯(cuò)了或者輸入沒有歸一化。GPU訓(xùn)練對輸入尺度很敏感因?yàn)楦↑c(diǎn)數(shù)的動(dòng)態(tài)范圍有限。5.4 性能調(diào)優(yōu)從每秒幾輪到每秒幾百輪最初的實(shí)現(xiàn)可能每秒只能跑幾輪迭代慢得讓人懷疑人生。優(yōu)化方向有幾個(gè)減少繪制調(diào)用。每次繪制都有固定開銷包括狀態(tài)切換、著色器綁定、紋理綁定。如果能把多個(gè)操作合并到一個(gè)著色器里就能減少調(diào)用次數(shù)。比如把矩陣乘法和偏置加法合并把激活函數(shù)和損失函數(shù)合并。使用頂點(diǎn)緩沖對象VBO。畫矩形時(shí)不要每次都用gl.vertexAttribPointer重新指定頂點(diǎn)數(shù)據(jù)。創(chuàng)建一個(gè)VBO把矩形的四個(gè)頂點(diǎn)存進(jìn)去每次繪制時(shí)直接綁定。避免不必要的紋理切換。紋理切換是昂貴的操作。如果多個(gè)著色器使用相同的輸入紋理盡量把它們安排在連續(xù)的繪制調(diào)用里。使用WebGL 2.0。WebGL 2.0支持更多紋理格式、多重渲染目標(biāo)MRT、以及更靈活的循環(huán)控制。如果目標(biāo)用戶設(shè)備支持優(yōu)先用WebGL 2.0。但要注意兼容性做好降級方案。批處理。如果訓(xùn)練數(shù)據(jù)是小樣本可以把多個(gè)樣本打包成一個(gè)批次一次前向傳播算完。這樣GPU的利用率更高因?yàn)槊總€(gè)著色器調(diào)用處理的數(shù)據(jù)量更大。實(shí)測下來一個(gè)兩層全連接網(wǎng)絡(luò)784-128-10在MNIST上訓(xùn)練優(yōu)化前每秒約5輪優(yōu)化后能到每秒200輪以上。這個(gè)速度已經(jīng)足夠做交互式教學(xué)了——學(xué)生寫一個(gè)數(shù)字模型在幾百毫秒內(nèi)就能完成一輪微調(diào)。6. 瀏覽器端訓(xùn)練的邊界與適用場景6.1 什么規(guī)模的模型適合放在瀏覽器里訓(xùn)不是所有模型都適合瀏覽器端訓(xùn)練。我的經(jīng)驗(yàn)是參數(shù)量在10萬到100萬之間的模型WebGL訓(xùn)練是可行的。超過這個(gè)規(guī)模紋理尺寸和顯存會成為瓶頸而且訓(xùn)練時(shí)間會變得不可接受。具體來說全連接層每層幾百到幾千維層數(shù)不超過5層這樣的網(wǎng)絡(luò)在瀏覽器里訓(xùn)練很流暢。卷積層也可以做但需要把卷積展開成矩陣乘法im2col這會增加內(nèi)存占用。如果卷積核不大比如3×3通道數(shù)不多比如32或64也是可以跑的。不適合的場景包括大型語言模型、高分辨率圖像生成模型、需要大量迭代才能收斂的模型。這些還是交給專業(yè)訓(xùn)練環(huán)境。6.2 隱私保護(hù)與離線可用性的真實(shí)價(jià)值瀏覽器端訓(xùn)練最大的賣點(diǎn)不是性能而是數(shù)據(jù)不出本地。用戶的輸入數(shù)據(jù)、標(biāo)注數(shù)據(jù)、甚至模型本身都可以完全留在瀏覽器里。這對于隱私敏感的應(yīng)用場景很有價(jià)值比如醫(yī)療健康類的個(gè)人數(shù)據(jù)訓(xùn)練、教育類的學(xué)生行為數(shù)據(jù)建模。另一個(gè)價(jià)值是離線可用。一旦頁面加載完成后續(xù)的訓(xùn)練和推理都不需要網(wǎng)絡(luò)連接。這對于網(wǎng)絡(luò)不穩(wěn)定的環(huán)境或者需要完全離線部署的場景是很實(shí)用的特性。還有一個(gè)容易被忽略的價(jià)值即時(shí)反饋。用戶補(bǔ)充幾個(gè)樣本模型立刻更新識別效果當(dāng)場變好。這種交互體驗(yàn)是云端訓(xùn)練做不到的因?yàn)樵贫擞?xùn)練有網(wǎng)絡(luò)延遲和排隊(duì)等待。6.3 和TensorFlow.js的GPU后端有什么不同TensorFlow.js也支持WebGL后端而且封裝得很好幾行代碼就能定義模型并訓(xùn)練。那為什么還要自己寫WebGL著色器區(qū)別在于控制粒度。TensorFlow.js的WebGL后端是一個(gè)通用框架它會把各種操作映射到著色器但中間有很多抽象層。對于標(biāo)準(zhǔn)操作比如全連接、卷積、常見的激活函數(shù)它的性能已經(jīng)很好。但如果你需要自定義操作或者想針對特定硬件做極致優(yōu)化自己寫著色器更靈活。另外TensorFlow.js的WebGL后端在某些設(shè)備上會有兼容性問題而且它的內(nèi)存管理是自動(dòng)的有時(shí)候會導(dǎo)致紋理泄漏或者頻繁的垃圾回收。自己管理紋理和幀緩沖雖然代碼量大但行為完全可控。我的建議是如果標(biāo)準(zhǔn)模型能滿足需求直接用TensorFlow.js省時(shí)省力。如果需要自定義訓(xùn)練邏輯或者對性能有極致要求再考慮手寫WebGL。7. 從原型到產(chǎn)品工程化落地的幾個(gè)關(guān)鍵決策7.1 如何設(shè)計(jì)降級方案保證兼容性不是所有瀏覽器都支持WebGL也不是所有支持WebGL的設(shè)備都支持浮點(diǎn)紋理。產(chǎn)品化時(shí)必須設(shè)計(jì)降級方案。我的做法是三級降級第一級WebGL 2.0 浮點(diǎn)紋理。這是最優(yōu)路徑性能最好。第二級WebGL 1.0 浮點(diǎn)紋理擴(kuò)展。性能稍差但兼容性更廣。第三級純CPU JavaScript。用TypedArray做矩陣運(yùn)算雖然慢但保證能用。對于小模型參數(shù)量小于1萬CPU版本也能在可接受的時(shí)間內(nèi)完成訓(xùn)練。降級檢測在頁面加載時(shí)做一次把結(jié)果緩存起來。用戶不需要知道底層用的是哪條路徑只需要看到訓(xùn)練能跑起來。7.2 訓(xùn)練過程的進(jìn)度反饋與中斷處理GPU訓(xùn)練是異步的你發(fā)出繪制調(diào)用后GPU在后臺跑JavaScript繼續(xù)執(zhí)行。如果訓(xùn)練循環(huán)寫成一個(gè)大的for循環(huán)頁面會卡死用戶看不到任何進(jìn)度。解決方案是用requestAnimationFrame或者setTimeout把訓(xùn)練循環(huán)拆成小批次。每一幀跑幾輪迭代然后更新進(jìn)度條再請求下一幀。這樣頁面保持響應(yīng)用戶能看到訓(xùn)練進(jìn)度。中斷處理也很重要。用戶可能中途關(guān)閉頁面或者切換標(biāo)簽頁。要在beforeunload事件里清理WebGL資源避免內(nèi)存泄漏。另外如果用戶切換標(biāo)簽頁requestAnimationFrame會暫停訓(xùn)練也會暫停。這是符合預(yù)期的行為但要在UI上給出提示。7.3 模型持久化把訓(xùn)練好的權(quán)重存到哪里訓(xùn)練完成后權(quán)重需要保存。GPU紋理里的數(shù)據(jù)不能直接序列化必須先讀回CPU轉(zhuǎn)成Float32Array然后存到IndexedDB或者localStorage。IndexedDB適合存大文件幾MB到幾十MBlocalStorage只適合存小數(shù)據(jù)幾KB。對于神經(jīng)網(wǎng)絡(luò)權(quán)重通常用IndexedDB。存儲時(shí)可以把Float32Array轉(zhuǎn)成Blob或者直接存ArrayBuffer。讀取時(shí)反向操作從IndexedDB讀出ArrayBuffer轉(zhuǎn)成Float32Array再上傳到GPU紋理。整個(gè)過程要注意異步處理因?yàn)镮ndexedDB的讀寫都是異步的。還有一個(gè)細(xì)節(jié)權(quán)重的版本管理。如果模型結(jié)構(gòu)變了舊權(quán)重就不能用了。我習(xí)慣在存儲時(shí)帶上一個(gè)版本號或者結(jié)構(gòu)哈希讀取時(shí)校驗(yàn)不匹配就重新初始化。8. 我踩過的三個(gè)印象最深的坑第一個(gè)坑是紋理坐標(biāo)的0.5偏移。剛開始寫著色器時(shí)我直接用了gl_FragCoord.xy / textureSize作為紋理坐標(biāo)結(jié)果采樣到的總是相鄰像素的值導(dǎo)致矩陣乘法結(jié)果完全錯(cuò)誤。排查了很久才發(fā)現(xiàn)gl_FragCoord給出的是像素中心坐標(biāo)而紋理坐標(biāo)需要的是歸一化的像素中心所以要加0.5再除。這個(gè)細(xì)節(jié)在大多數(shù)WebGL教程里都不會強(qiáng)調(diào)但做通用計(jì)算時(shí)是致命的。第二個(gè)坑是浮點(diǎn)紋理的線性插值。默認(rèn)情況下紋理采樣使用線性插值會混合相鄰像素的值。對于圖像渲染這是好事但對于矩陣運(yùn)算這是災(zāi)難。必須把TEXTURE_MIN_FILTER和TEXTURE_MAG_FILTER都設(shè)為NEAREST。我一開始忘了設(shè)結(jié)果梯度計(jì)算出來總是有微小的噪聲訓(xùn)練完全不收斂。第三個(gè)坑是幀緩沖的完整性檢查。創(chuàng)建幀緩沖后我沒有檢查checkFramebufferStatus直接就開始渲染。在某些設(shè)備上幀緩沖創(chuàng)建失敗但不會報(bào)錯(cuò)渲染結(jié)果全是0。后來養(yǎng)成了習(xí)慣每次創(chuàng)建幀緩沖后都檢查狀態(tài)不完整就拋異常。這個(gè)檢查在開發(fā)階段能省下大量調(diào)試時(shí)間。9. 后續(xù)可以繼續(xù)深挖的方向如果你已經(jīng)把基礎(chǔ)的WebGL訓(xùn)練跑通了還有幾個(gè)方向可以繼續(xù)優(yōu)化。一是用WebGL 2.0的變換反饋Transform Feedback。WebGL 2.0允許把頂點(diǎn)著色器的輸出直接寫回緩沖區(qū)不需要經(jīng)過片段著色器。這對于逐元素操作比如激活函數(shù)、參數(shù)更新可能更高效因?yàn)楸苊饬思y理的創(chuàng)建和綁定。二是混合精度訓(xùn)練。用16位浮點(diǎn)數(shù)做前向和反向用32位浮點(diǎn)數(shù)做參數(shù)更新。這樣可以減少顯存占用和帶寬消耗速度可能提升一倍。但要注意數(shù)值穩(wěn)定性可能需要損失縮放loss scaling來防止梯度下溢。三是多GPU協(xié)同。如果用戶設(shè)備有多個(gè)GPU比如集成顯卡加獨(dú)立顯卡理論上可以用多個(gè)WebGL上下文并行計(jì)算。但瀏覽器對多GPU的支持還很有限實(shí)際可行性不高。四是和WebAssembly結(jié)合。把一些不適合GPU的操作比如數(shù)據(jù)預(yù)處理、復(fù)雜的優(yōu)化器邏輯放到WASM里做GPU專注做矩陣運(yùn)算。兩者通過SharedArrayBuffer通信實(shí)現(xiàn)真正的并行。這條路我走了大半年從最初的“這能行嗎”到現(xiàn)在的“基本能用”中間踩了無數(shù)坑但也積累了不少經(jīng)驗(yàn)。瀏覽器端訓(xùn)練不是要取代專業(yè)訓(xùn)練環(huán)境而是在特定場景下提供一種輕量、隱私、即時(shí)的選擇。如果你的項(xiàng)目恰好需要這些特性WebGL方案值得一試。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久9RE热视频精品98| 日韩欧美不卡| 六月综和久久| 综合网网欲色| 天天插天天插| AV性爱在线| 丁香五月婷综合网| 亚洲色婷婷五月天| 色五月婷婷成人| 九九精品免费| 五月婷丁香在线视频在线| 九九九激情网| 97福利视频| 丁香五月成人在线| 天天射夜夜爽| 九九综合图片网| 婷婷六月啪啪| 色婷另类| 欧美激情综合五月色丁香| 婷婷99中文字幕| 亚洲日韩一页精品发布| 91九色国产| 婷婷五月天国产手机在线视频观看| www九九免费视频| 99爱视频在线| 99热骚货| 五月色丁香国产在线视频| 亚州色综合| 九九精品综合| 噜啊噜在线| 99在线观看视频精品| 一级内射毛片| 高清资源站日A美A欧亚…| 婷婷综合五月天| 五月丁香美女| 婷婷偷拍网| 影音先锋五月天婷婷丁香在线观看| 九月激情网| 色天天综合成人网| 人妻VideOssS人妻| site:feetmall.com| 久久久久久久97| 啪啪视频99| 九九这里只有精品| 无码免费人妻A片AAA毛片西瓜| 天天日天天爽夜夜爽| 五月婷婷婷综合网| 在线视频激情网站| 色综合久久综合| 中文字幕无码人妻少妇免费视频 | 97九色视频| 极品少妇XXXX精品少妇偷拍| 亚洲精品无码一区二区| 中文中文在线| 久久男人网婷婷| 五月丁香啪啪| 精品国产AV色一区二区深夜久久 | 亚洲五月婷婷| 久久总和99| 亚洲最大五月天成人网| 色婷婷色人人射| 日在线V视频在线播放| 激情五婷网| 亚洲综合成人网站| 日韩久久色| 亚洲4区国产欧美| 成人av在线网| 超碰在线免费观看日韩| 人人操9| 99热啪啪| 国内一级片| 激情婷婷丁香| 久99在线| 狠狠色丁香久久婷婷综合五月| 91精选国| 99色在线观看视频| www.日本久久videos| 亚洲无码成人网| 日本三级网址| 天天爽爽日日做做| 另类激情五月| 超碰在线9| 五月天堂婷婷| 免费观看欧美成人AA片爱我多深 | 久久久久婷| 久久男人网婷婷| www天堂99| 色婷婷精| 久碰视频| 婷婷五月伦理| 日韩性视频| 人人人操| 久久视9精| 偷拍九九热| 97色综合| 久久五月天激情美女| 五月色情婷婷| 激情五月婷婷丁香综合网| 丁香五月电影| 日日干天天| 五月天色色网站| 成人做爰A片免费看视频| 九九综合九| 婷婷天天五月天| 98永久精品| 五月婷婷深深的爱| 天天日天天干天天插天天射| 色五月91| 三日本无码| 成人AV网站在线| 久久东京热婷婷五月| 五月婷婷深深的爱| 九九热精品视频| 伊人狠狠丁香婷婷综合尤物| 精品五月花| 9l视频自拍9l视频自拍九色学生| 久久久婷丁香五月| 亚洲六月婷婷| 97在线视频 欧美| 99爱99操| www.丁香五月| 精品一二三区久久AAA片| 91呦呦呦| 99这里只有免费的小视频在线观看| 精品99爱免费视频在线观看| 97色色色色色| 99啪啪网| 国产综合网在线| 婷婷五月天堂| 丁香五月 无码| 日日爱678| 婷婷开心久久| 黄桃AV无码免费一区二区三区| 亚州激情九月| 婷婷六月伊人| 丁香综合伊人AV| 女人天堂AV| 九九色色| 第2色五月婷| 色XX综合网| 精品久久久人妻| 五月天婷婷色播综合在线| 五月天婷婷色色网| 综合五月天| 婷婷成人五月天| 久久密臀婷婷| 欧美啄木乌丝袜人妻系列| 色色色综合色| 激情综合网五月婷婷| 99日韩网站| 99精品国产在热久久| 99玖玖在线视频| site:publishdd.com| 99超级碰免费视频| 97精品综合久久| 婷婷五月丁香久久| 婷婷天天五月天| 六月亚洲婷婷6月中文字幕| 激情无码网| 狠狠插.com| 九九RE视频在线精品| 五月天色综合服务平台| 国产高潮A片羞羞视频涩涩| 玖玖色综合网| 婷婷开心激情| 日日夜夜狠狠婷婷色| 超碰97免费在线| 激情五月天婷婷色色色色色色色色色色色 | 午夜69成人做爰视频| 九九九九九九九九九九九九九国产精品| 99热思思| 99玖玖人人| 欧美熟女乱又伦| 亚洲天堂久久| 森林影视大全,最好看的2019年视频| 99精在线| 99热在线里有精品| 国产操B| 五月丁香久久呀| 婷婷99狠狠| 怡红院 久久| 久99久视频| 色婷婷欧美| 婷婷色九月| 欧美月久久| 99只有这里有精品在线视频| Www99热| 99热精品在线观看| 婷婷久久网| 久久99精品久久只有精品| 国产99久9在线| 99亚洲欧洲| 精品一二三区久久AAA片| 九九家庭影院| 97日本操| 大香蕉久久久久| 激情图片婷婷| 丁香五月天激情综合| 丁香五月六月久久综合| 国产高潮白浆一区二区| 色色婷| 欧美日韩精品人妻狠狠躁免费视频| 日本久久网| 囯产精品一品二区三区| 婷婷六月啪啪| 天天做综合| 丁香六月啪| 99热.com| 99激情在线| 俺去也五月天婷婷| 99热这里只有精品 搜| 九九丁香社区欧美激情| 99热亚洲精品| 激情五月丁香在线观看直播| 欧美日韩五月婷婷| 色综合五月天| enecarbon-materials.com污K127封锁请涟系@wip1688 | 久久五月婷天天干| 五月婷婷综合久久| 五月天婷婷永久免费视频| www,setingting| 五月天天视频| va婷婷在线| 丁香婷婷成年| 91精品综合久久久久久五月丁香| 婷婷色成人| 91九色中文字幕女在线观看| 免费观看全黄做爰的视频| 五月天色婷婷伊人网| 天天综合色丁香| 夜夜干天天操| 天天爽天天| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 激情综合网亚洲色图| 91九九九九九九| 91啪啪视频| 五月丁香亚洲综合网| 五月丁香花激情啪啪网| 欧美99热| 色五月综合在线| A A色色| 九九综合九九| 日本视频欧美观看免费| 亚洲精品无人区| 黄色一级影片| 亚洲视频图片婷婷五月| 丁香五月婷婷精品视频| 六月婷婷天天操夜夜爽视频| 97色欧美| 色综合视频| 99视频| 4399亚洲视频| 激情五月天天狠狠久久| 婷婷干五月综合在线播放| 九九成人精品免费视频| 久久香蕉福利| 玖玖婷婷色| 欧美私人家庭影院| 午夜性做爰电影| 五月丁香六月婷婷啪啪| 婷婷五月色天| 五月丁香综合激情网| 安息电影在线观看完整版| 亚洲XX网| 99手机在线精品视频| 91聚色综合网| 啪啪操网| 久久影视婷婷五月| 9 99免费视频| 狠狠人妻色综合| 色五月中文字幕| 深夜婷婷 丁香| 成人短视频在线观看| 超碰九九热| 狠狠干五月天| www久久艹| 婷婷色五月综合| 国产精品蜜臀99| 亚洲欧洲色色| 欧美色色色| 色婷婷久久综合| 激情五月天色婷婷综合| 91丨九色丨熟女丰满| 欧美日本97| 婷婷天堂综合网| 国产SUV精品一区二区883| 337p大胆噜噜噜噜噜91Av| 丁香九月婷| YJLZZJLZZ亚洲乱熟无码| AA丁香综合激情| 91色情播放| 在线可以看的av网址| 久久婷婷操| 五月的丁香六月的婷婷| 婷婷精品综合| 五月婷精品| 成人在线视频网| 99re6久热只有精品6在线直播| 黄色三级日本| 亚洲精品久久久久久久久久吃药| 99在线视频网址在线观看| 色综合久久久无码中文字幕999| 99ER热精品视频| 操大屄五月天视频| 五月丁香综合成人社区| 婷婷色五月激情| 26uuu淫色| 久久婷婷五月草视频在线播放| 丁香成人综合| 99色在线观看视频| 五月丁香婷婷色| 搡BBBB搡BBB搡五十| 玖玖99婷婷| 五月婷婷亚洲综合在线| 亚洲愉拍99热成人精品| 五月丁香婷婷国产精品综合| 婷婷亚洲五月| 亚洲妇女熟BBW| 色香蕉婷婷| 日本天堂久久| www.99热国产| 丁香五月婷婷日本| 五月激情影院| 五月婷婷香蕉| 色婷婷97| 俺去也在线www色官网| 色婷婷电影网| 成人中文网| 久久影视婷婷五月| 另类图片五月天婷婷| 青青草原精品久久| www.91久久| 免费色婷婷| AV操逼网| 人人干人人操人人摸| 天天搡日日搡aaaaⅩ| 狠狠综合网| 色婷婷无吗| 99综合久久| 婷婷免费无视频| 激情开心五月天| www.91久久| 99久久五月婷婷| 九九综合色| 天堂AV在线看| 免费看欧美成人A片无码| 日本少妇AA一级特黄大片| www久| 婷婷五月丁香久久| 丁香激情网| 久热久操久热久草国产91| 伊人婷婷青青cao| 亚洲综合色丁香五月天| 狠狠色噜噜狠狠狠狠综合| 永久天堂日本| 五月丁香激情婷婷综合| 伊人在线视频| 情欲综合网| 色色色99| 日日噜噜夜夜狠狠久久丁香六月| 色婷婷色99国产综合精品| 亚洲操操操| 色五月婷婷操逼| 婷婷五月天偷拍| 26uuu日韩| 啪啪六月婷婷| 精品九九视频| 国产精品天天狠天天看| 人妻射精AV| 国产精品成人AV在线| 精品少妇蜜臀91| 欧美黄色AA片哗啦啦啦| 在线另类| 激情综合网五月婷婷| 婷婷丁香花五月天| 五月丁香婷婷综合久久| 婷婷月综合| 思思久久精品| 婷婷六月天天| 丁香激情四射| 午夜日韩久久久网站| 五月丁香拍拍激情综合| 中字幕视频在线永久在线观看免费 | 99视频只有精品| 熟女网站久久| 91综合国免费久入| www色婷婷| 超碰99久久| 玖玖精品婷婷| 操操人人| 香蕉婷婷| 六月婷婷色五月| 97高清国语自产拍| 5月婷婷性视频| 国产真实乱了老女人视频| 日韩人妻无码一区二区| 亚洲av| 亚州精品久久久久AV无码| 丁香五月天成人| 人妻精品久久久久久久| www.无码com| 99色| 九九爱这里只有精品| 色色丁香| 六月丁香五月天| 99久在线精品99re5热视频| AV色婷婷| 翔田千里aV中文字幕| 图片区 小说区 区 亚洲五月| 99久久综合网| 中文字幕在线aⅴ免费观看| 亚洲国产精品综合色区| 精品久久久999| 精品人妻伦一二三区久久| 夜夜夜天天操| 97操碰在线97| 色综合色五月| 日批在线看| 亚洲人成网站999久久久综合| 99精品视频网| 最新午夜理论片| 色久婷婷五月| 人妻六月天| 91操熟女| 无码色色| 伊九九三级区| 日韩成人综合| 色综合网址| 欧洲亚洲免费视频区| 精品一区久热| 六月丁香五月天| 日日干干天天干| 久99精品视频| 99在线精品免费视频| 五月丁香六月婷婷综合| 深爱激情网五月| 4399成人黄A片| 欧亚色色| 激情综合网色五月| 免费无码毛片一区二区A片| 五月丁香六月婷婷激情视频在线观看免费| 97人凄人人操人人爽| 精品视频99看在线视频| 日本WWW九九九| 亚洲亚洲人成综合网络| 变态另类9| 深爱五月最新网址| 丁香亭亭久久| 91操片| 97啪在线观看视频| 婷婷丁香人妻| 影音先锋色色色资源色资源色| 大鸡巴伊人网| 99精品视频在线观看| 91狠狠色丁香| 亚洲综合五月| 五月丁香六月婷婷在线播放| 成人色图情色成人网 www.5b5b5bcom 五月天 | 激情五月婷婷视频一区二区三区| 色色A| 人妻久久久久久久 | 丁香,开心成人,久久| 99久在线精品| 国产精品成人av在线观看春天| 丁香婷婷基地| 中文字幕五月久久婷| 日逼影音先锋男人AV资源站| 婷婷五月天网| 色色色色网| 亚洲无码色| 丁香色综合| 日本婷婷丁香五月| 99久热这里有精品| 婷婷丁香五| 91婷婷色| 婷婷五月综合网| 丁香五月综合激情久久潮喷| 超碰2021| 久久丁香综合香蕉| 欧州婷婷五月天综合| 国产真人做爰视频免费| 大香蕉久久视频久久视频| 开心五月激情网| 成人AV在线电影| 999久久久国产精品| 天天激情| www.久热| 五月丁香啪啪婷婷| 五月天社区狠狠| 69色色视频| 丁香六月婷婷综合在线| 久久人妻乱| 99热这里只有精品2| 96五月丁香熟女| 欧美色五月天| 日日干日日| 婷婷五月色播| 久久九九热视频| 色情综合网| 婷婷五月激情图片| 久久9视频| 一本大道嫩草AV无码专区| 激情五月天综合网| 九九热狼人| 日韩三级视频一区二区| 婷婷天天五月天| 亚洲婷婷丁香五月| 9久久久久久久久久久| 婷婷五月天综合激情| 六月丁香激情综合网| 色色色综合视频| 五月天自拍视频| 丁香五月a| 三级大香蕉网| 婷婷九月综合| 92久久精品一区二区| AV片在线观看| 亚洲综合婷婷五月| 91欧美| 天天综合图片| 亚洲第一综合| 五月天激情网图片| 狠狠色九月| 久久综合九九| 五月婷亚洲精品| 激情综合五月天| 免费观看全黄做爰的视频 | 综合色视频| 色色爽爽天天| 深爱激情五月天婷婷网| 操一操插一插| 色色99| 99综合色色色| 伊人久热91| 久久精品色| 99色最新在线视频网站| 99热这里只有精品16| 国产精品18久久久| 色婷婷免费视频| 啪啪啪啪五月天| 婷婷亚洲综合| A片女女女女女女BBBB| 99re青青草| 精品色情一区二区三区四区| 久久久久久人妻| 另类图片五月天| 久久人妻少妇嫩草AV| 人妻激情在线| 99热这里只有精品2| 激情五月婷婷综合| 五月天啪啪视频| 五月婷婷真爱激情网| 色综合久久久久| 午夜成人综合| 夜夜夜夜夜操| 日本色啪| 99热99免费| 久久六月综合| 国产精品视频免费看| 五月婷婷婷自由综合| 婷婷五月激情图片| 婷色综合| 精品国产va久久久| 色色欧美色色| 婷婷综合色色| 色色色色色色色色色色色色色97| 日本99婷婷| 婷婷五月天99| 国产精品第一国产精品| 色欲操| 色婷丁香| 人人摸人人操人人爽| 九九这里都是精品| 99操不停| 婷婷开心五月| 亚洲精品a成人在线播放| 99久久久国产大片| 激情五月天色播| 亚洲天堂热| 五月婷婷熟女| www.久久久久久| 综合网亚洲| 激情久久婷婷| 亚洲天堂AAA| 国产暴力强伦轩1区二区小说| 激情综合网五月在线播放| 婷婷五月电影| 99久久精品国产色欲| 丁香六月激情综合| 婷婷六月啪啪| 亚洲AV免费在线| 天天日综合网射| 婷婷丁香五月综合| 国产精品色一哟哟| 一区=区操屄高清大全av| 激情五月天婷婷视频| 丁香88AV五月婷婷| 久草五月天| 国产AV不卡福利| 综合久久十三| 天天爱天天吃狠天天透| 激情骚五月| 婷婷五月综合啪| 久艹大香蕉| 婷婷激情丁香五月天综合| 337p午夜影院| 99日本精品视频热| 182.t午在线观看| 激情久久久久久| 2020久久婷婷五月| 欧美大香蕉视频| 黄桃AV无码免费一区二区三区| 99碰在线视频| 五月婷婷六月激情在线| 人人干99| 在线播放成人| 成人必爱视| 狠狠干狠狠干| 六月色色| 国产免费AV在线| 九九热视频免费| 丁香五月五月婷婷| 色婷婷激情五月天| 深爱开心五月天| 综合色五月天| 五月天丁香看婷婷| 丁香六月天婷婷色| 另类综合网| 夜夜躁爽日日| 91色吧网| 五月丁香欧美综合| 91人久| 日本三级日本三级99| 日韩99色99| 少妇水多A片太爽了| 中文字幕,综合,91| 亚洲欧美国产高清vA在线播放| 操99| 超碰在线精品| 五月天天视频| 亚洲无AV在线中文字幕| 亚洲99综合| 伊人在线视频| 黄网在线免费观| 激情五月婷黄版| 色色99| 成人免费超碰| 婷婷色色网| 色婷婷亚洲精品天天综| 久久婷婷网| 亚洲激情网| 大香蕉色婷婷伊人在线| 丁香五月激情欧欧美| 九热免费视频| 激情综合五月婷婷| 日韩无码AV电影网站| 日韩啪| 五月香婷婷| 91丨人妻丨国产丨丝袜| 可以直接看的AV| 国外亚洲成AV人片在线观看| 再次出发二| www天天色天天射| 五月丁香婷婷激情爱爱| 99爱在线视频观看| 久久综合香蕉国产国产蜜臀AV| 色婷婷五月天在线| 99cao婷婷| 99re热久久| 婷婷丁香成人| 深爱激情AV| 中文字幕网伦射乱中文| 情欲综合网| 最近中文字幕2019视频1| www色综合亚洲92| 久机视频这只有精品| 激情超碰网| 夜夜干 夜夜操| 九九超日本| 中文在线视频久1| 天天揷综合网| 色综合久久88色综合天天| 97色碰碰公开视频| 婷婷六月综合激情| 91要啪| 另类视频五月天| 久操干| 婷婷久久亚洲| sS丁香五月婷婷| 丁香六月婷婷色XXXX| 天天色天天色天天色天天色天天色| www.ywav| 成人在线日韩欧美| 日本精品在线噜噜噜| 欧美色五月| 九九热短视频在线观看| 超碰97在线观看免费| 五月天婷婷在线AN| 丁香六月激情四射| 色99在线| 婷婷五月激情天| 人妻久久婷婷| 亚洲操b| 五月丁香六月婷婷不卡免费无码 | 91九色PORNY大屁股| 中文字幕婷婷五月天| 国产成人精品一区二三区熟女在线 | 婷婷内射视频在线| 思思热在线视频观看精品| 5月丁香美女影院| 久婷五月| 五月天激情偷拍| 第九色区AV在线| 操丝袜视频影院导航| 成人性生活免费观看。| 人人爱人人草| 激情综合五月| 色五月激情婷婷| 亚洲色碰| 日本波多野结衣视频| 久久婷婷五月综合激情国产| 五月天激情网图片 - 百度| 99热爆在线| 久久婷婷亚洲| 亚洲综合五月天综合| 2015WWW永久免费观看播放| 99热精品观看| 开心日韩丁香婷婷五月| 婷婷色五月天色色| 99激情| 五月婷婷丁香婷婷| 婷婷综合五月天| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 久色资源网| 激情综合亚洲| 新男人天堂人妻| 色婷婷亚洲婷婷| 五月丁香综合在线| 涩涩五| 久久久宗合| 久久婷婷免费| 久色激情| 亚洲欧美另类在线23p| 国产SUV精品一区二区883| 91久久九久久九久久九久久九久久| 欧美久久五月婷婷| 97人人看| 夫妻超碰在线| 成人av免费观看| 超碰人人操| 婷婷五月天综合色| 久草久青福利| 翔田千里 50岁 无码| 五月综合激情网| 色五月婷婷丁香五月| 99久久国产成人精品| 大香蕉伊人99| 婷婷丁香五月天熟女丝袜| 色情婷婷五月天| 婷婷久月| 五月综合激情久久| 涩涩五月天| 狠狠色狠狠爱| 日本高清不卡免费一区二区三区| 婷婷色网站| 欧美色性色好| 日日操天天| 婷婷久久综合久| 欧美丁香五月| www.人人操人人看人人想人人摸 人人人人操,COM | 亚洲五月天色色| 色色色色丁香| 九九香蕉网| 婷婷六月激情综合| 婷婷五月天色综合| 亚洲婷婷丁香五月视频| 六月婷婷网| 久久综合色五月| 亚洲成人中文字幕| 97超碰,人人舔,人人操,人人摸| 激情第四色| 玖玖在线视频| 色五月综合| 婷婷涩五月| 可以直接看的av| 五月婷精品| 天天操夜夜夜拍拍拍| 亚洲精品欧洲精品| 99re6热在线精品视频播放速度 | 日日操夜夜爽天天天| 久久五月天精品视频| 色色激情五月天| 91九色国产熟女| 丁香激情五月| 激情丁香九九五月综合网| 日欧一片内射VA在线影院| 丁香五月成人| 色无码| 色情丁香五月婷婷精品| 丁香亚洲婷婷五月| 色五月婷婷婷婷| 性爱综合网| 就要爱综合| 九九99视频精品| 色五月开心五月激情五月| 丁香五月婷婷姐| 精a品a视a频| 久久国产性爱A V| 狠狠搞综合色| 日韩色色视频www| 丁香婷婷视频| 影音先锋偷偷色男人站| 伊人干综合| 天天日天天舔| 人与禽A片啪啪| 99riAV成人在线视频| 欧亚中文A V| 久久艹 五月天| 精品自拍99| 黑人无码一区| 91chinese在线| 久热这里只有精品在线观看 | AA片在线观看视频在线播放| 色五月六月| 色色激情网| 五月激情天| 婷婷色情 | 久久九九婷婷| 任你爽精品免费视频6| 97婷婷色| 深爱丁香激情| 丁香婷婷色情社区成人小说| 人妻aV在线| 午夜爱爱网站| 99热精品在线在线| 性爱技巧五月| 亚洲综合草草| www.99热在线| 亚洲中文丁香| 天天爽综合网| 日本综合色色| 色婷丨日丨天丨综合久久| 人人草成人视频| 婷婷丁香激情| 亚洲不卡欧洲| 中文字幕在线免费看线人| 99热99日天天干| 欧美99热| 色综色五月天婷婷| 亚洲美女高潮久久久久久69| 91操操| 国产成人AV不卡| 五月婷婷性爱视频| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 殴美激情综合网| 99久久人妻精品无码二区| 久操人| 69堂午夜视频最新地址| 日日夜夜狠狠操| 久久538| 99热观看| 99这里只有免费的小视频在线观看| 亚洲狠狠狠| 色五月激情综合网| 婷婷福利影院| 婷婷丁香五月天婷婷| 色五月综合激情| 99热66| 亚洲Av成人在线观看| 日韩狠狠色婷婷| WWW,五月| 操逼电影免费看| 婷婷综合色色| 噜噜色婷婷| 香蕉AV福利精品导航| 97性视频| 欧美va在线| 激情久久久| 国产a视频| 99er6免费视频热播| 婷婷开心激情| 成人无码精品1区2区3区免费看| www.henhenl| 婷婷色情六月| 内射 无码 伊人| 婷婷欧美色| 久久婷婷热| 综合 蜜月 婷婷| 五月天激情日色在线| 激情五月婷婷五月| 色丁香五月| 99这里只有| 男人先锋久久| 天天色天天爱天天舔| 婷婷丁香五月综合| 婷婷七月丁香色色| 婷婷丁香五月高清| 九九色婷婷五月天| 99九九综合久久九九| 五月婷婷丁香六月| AV在线资源| 国产精品99久久久久久猫咪| 丁香婷婷成人网| 五月伊人91| 色综合爱综合| 色五月网址| 久久婷婷五月天| 五月丁香婷婷久久| 亚卅毛片| 激情六月天| 97精品综合久久内射| 五月婷婷天天| 综合久久六月| 五月丁香六月婷婷姐| 在线亚洲综合| 另类激情首页| CAOBIBI| www五月天com| 国产精品久久久爽爽爽麻豆色哟哟| 凹凸探花电影| 99噜噜噜在线播放| 亚色网站小视频| 五月丁香影视| 婷婷五月天成人动漫 | 噜噜五月天综合| 五月天另类小说久久小说网| 日韩久久日| 亚洲色色香蕉| 99玖玖视频| 婷婷激情视频欧美视频自拍视频欧美剧| 丁香五月欧美午夜视频| 午夜色丁香| www.色五月| 非洲一级AV| 99热最新| 久色视频在线| 99热亚洲| 天天干天天 亚洲| 任你干aa| 一级A片天天操夜夜操| 婷婷婷狠狠| 国产一二三四五六七八视频| 白人荫道BBWBBB大荫道| www.久久66| 精品AV无码超碰| 99热精品在这里| 精品久久9| 色色色综合网| 九九久久五月天综合伊人| 99热精品在线观看| 欧美va亚洲va在线播放| 超碰自拍天堂| 精品女人九九九| 丁香六月婷婷久久综合| 欧美成人精品A片免费一区99| 麻豆五月丁香婷婷| 国产在线自| 色噜噜综合网| 丁香五月瑟瑟| 成人国产网| 五月天天天天天天天天天天天婷婷婷| 日本WWW九九九| 色色色色色色网站| site:ornaments52.com| 色五月丁香五| 黄色一级影片| 97干婷婷| 精品久久人妻| 亚洲va欧美va国产综合久久久| 五月天婷婷亚洲| 五月天婷婷激情小说电影| 五月丁香六月婷婷免费| 久久丁香社| 97色色色色色| 五月综合激情视频| 成人网在线视频| 丁香五月性| 狠狠搞亚洲| 中文字幕在线资源| AⅤ网站在线看| 国产精品色婷婷久久久精品| 亚洲色涩视频| 久久天堂色| 99热主页日本| 婷婷色色播五月天| 99热网址| 香蕉人妻AV久久久久天天| 99色在线观看视频| 五月天开心色情网| 亚洲人人操| 欧美韩国日本| 五月开行婷婷色五月| 欧美婷婷丁香五月社区| 婷婷在线网| 婷婷五月激情欧美| 思思精品久久艹 | 丁香婷五月| 五月丁香六月婷婷啪啪| 99热网精品| 亚洲av网站| 欧美婷婷五月| 97人人操| 亚洲免费成人电影AV| 婷婷五月天久久| 欧美综合激情五月丁香| 99热1| 嫩草AV久久伊人妇女超级A| 噜噜狠狠色综无码久久合欧美| 婷婷五月天伊人在线| 欧美丁香五月| 九九九九操逼| 综合久久久| 五月花婷婷丁香| 人妻爽爽爽久久久久久久久| 五月天激情黄色网址| 欧美大片免费播放器| 99精品视频偷拍| 。久久久久久久久久久久久久人妻| 丁香六月婷月91婷月| 狠狠久久婷婷| 丁香婷婷激情四射五月| 狠狠干婷婷| 五月婷婷六月天| 亚洲六月婷婷| 丁香五月欧美色综合| 大波美女VA网站| 91色综合| www.99精品视频| 性爱111111| 婷婷五月成人| 97色在线观看视频| 天天日天天色| 丁香五月欧美成人| www.99热这里精品 | 一起草日本| 真实的国产乱XXXX在线91| 99热免费| 五月天色社区| 婷婷午夜天| 思思久久青草热| 精品国产va久| 五月丁香啪啪啪免费看| 婷婷五月激情图片| 激情五月婷| 金品在线视频99| 去色色五月天| 午夜69成人做爰视频| 婷婷五月天福利| 九色视频91| 五月婷婷偷拍| 182TV大香蕉| 深夜激情网| 26uuu欧美激情另类| caopeng97日韩| 狠狠久久婷五月综合色| 九九免费视频在线| 成人五月天婷婷| 亚洲综合在线伊人婷| caop在线视频| 国产激情综合| 色激情综合| 婷婷91| 97福利视频| 色色综合网站| 九色 在线| 激情五月天的婷婷| 综合色99| 天天爽在线视频| 99热99网| 婷婷五月天,影院| 婷婷色色狠狠| 综合激情网| 久色中文| 亚洲久热无码| 播播网色播播| 五月丁香激情婷婷| 丁香花色色网| 丁香五月天啪啪| 国产成人精品一区二三区熟女在线 | 久久九九囯产| 久久九九中文字幕| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 欧美成人精品三区综合A片| 色色无码| 99riAV成人在线视频| 九九精品re免费视频| 97干婷婷| 婷婷五月天色色| 色噜噜狠狠色综合伊人| 亚洲视频丁香网va| 就爱射中文字幕资源网| 人人草人| 99福利导航| 大学生高潮无套内谢视频| 91精品久久久久久77777| 色婷婷成人做爰A片免费看网站| 久婷婷视平| 91婷婷五月丁香碰| 综合色色婷婷| www,超碰| 久热这里这里有精品| 五月激情婷婷播播网| 六月合五月婷| 色婷婷av在线观看| 国产真人做爰视频免费| 伊人狼人干| 久久大香蕉同僚| 欧洲婷婷五月天| 五月花丁香婷婷| 五月婷婷影院| www色色com| yjzz亚洲国产| 日韩人妻无码精品| 2020久久婷婷五月| 丁香六月色婷婷| 99热免费在线| 日本91在线播放| 综合色影| 婷婷五月激情欧美大胆视频| 久久精品只有这| 狠狠色丁香| 丁香婷婷五月激情四射网| 五月丁香性爱| 深爱丁香激情| 久9热| 777精品久无码人妻蜜桃| 沈娜娜av| 婷婷五月色| 色五月婷婷色五月| 久久丁香| 99视频综合网| 99综合色色色| 欧美色小说婷婷| 欧美日韩99| 久久天堂女人| 99re99在线看| 狠狠色五月天| 亚洲V国产V欧美V久久久久久| 丁香花大香蕉婷婷综合| 99热最新地址在线| 婷婷五月激情五月激情| 亚洲国产精品VA在线看黑人| 久久久久久婷| 狠狠色狠狠干| 五月激情在线| 久久久亚洲精品一区二区三区浴池| 亚洲无码成人网| 婷婷网五月天| 性色人人爽| 天天激情夜夜干| 影音先锋一区二区三区| 久久黄色片| 337p大胆噜噜噜噜噜91Av| 六月婷婷在线| 最近中文字幕2019视频1| 超碰成人av| 色色哒五月婷婷六月丁香| 99亚洲视频| 日本久久99久久| 婷婷5月九九| 超碰在线99| 91九色国产在线| 狠狠高潮精品亚洲1| 国产精产国品一二三在观看| 亚洲综合色色| 怡红院一二三| 以及AA大片看看| 亚洲六月色婷婷| 九九色综合视频| 综合色在线| 很很操96| 婷婷九月激情| 七七九色| 久久这里只有精品无码| 丁香五月电影| 九九综合伊人| 五月丁香六月色| 依人大香蕉在钱1| 婷婷色色播五月天| 亚洲人人操| 操碰99| www.99热这里精品| 婷婷中文字幕网站| 天天日,夜夜爽| 激情五月综合亚洲另类| 色呦呦免费观看| 超碰激情网| 99久久国产宗和精品1上映| 婷婷月五天在线在线看| 色噜噜狠狠色综合日日| 九九大香视频| 欧美激情VA永久在线播放| 岛国操B不卡在线| 亚洲色色香蕉| 色色婷婷五月天| 99r这里只有精品哦| 久久机热/这里只有精品| 国产免费一区二区三区三州老师F1F1.CC | 91人碰| 国成人网| 久久五月天激情| 少妇人妻人伦A片| 精品久久婷婷五月天| www.婷婷.com| 91色色五月天| 五月婷网站| 果冻传媒A片一二三区| 我爱va亚洲va52| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 日本色色网站| 九九色图| 五月丁香婷婷基地| 激情丁香婷婷| 91狠狠色丁香婷婷综合久久| 天天日天天爽| 天天拍夜夜撸| 免费视频在线观看的网站| 婷婷色色播五月天| 婷婷五月激情四射手| 丁香激情五月少妇| 在线不卡AC| 91人人爽久久涩噜噜噜| 丁香久月婷| 任你爽视频| 久久婷婷激情五月天一区二区| 五月综合色| 欧美成人精品老美女噜噜噜| 久久婷婷七月丁香| 色婷婷丁香五月天| www.综合久久.com| 香蕉综合在线| 色色网站免费在线视频| 极品少妇高潮啪啪AV无码| 日韩无码人妻一区二区三区综合| 91在线观看九区| 色五月六月| 丁香五月AV| AAA久久| 女人露出p毛视频www网站| 激情五月天视频| 五月天婷婷网站| 99九九免费精品| www.henhenl| 99惹在线精品免费观看| 激情九月婷婷九月| 五月婷婷激情中文字幕| 综合网色| 图片区 小说区 区 亚洲五月 | 亚州操操| 丁香五月色播中文在线播放| 日韩在线视频9色| 狠狠摸狠狠摸| 婷婷伊人綜合中文字幕小说| 九九热精品| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 色色激情五月| 婷婷伊人| 综合五月婷婷| 色婷婷电影| 清纯唯美 激情四射| 丁香五月婷婷AV在线| 激情婷婷| 1024在线观看免费视频| 五月丁香婷婷久久| 99热99成人| 红桃91人妻爽人妻爽|