亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(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ù)字識(shí)別”的互動(dòng)教學(xué)頁(yè)面學(xué)生用鼠標(biāo)在畫布上寫個(gè)數(shù)字頁(yè)面立刻告訴他是幾。聽起來簡(jiǎn)單但他們的約束條件很苛刻不能有后端推理服務(wù)不能依賴云端API所有計(jì)算必須在用戶打開網(wǎng)頁(yè)的那一瞬間就準(zhǔn)備好而且還得支持“現(xiàn)場(chǎng)教學(xué)微調(diào)”——也就是學(xué)生可以自己補(bǔ)充幾個(gè)樣本讓模型當(dāng)場(chǎng)學(xué)一下識(shí)別效果立刻變好。這個(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最擅長(zhǎng)的事情。所以用WebGL來加速瀏覽器端神經(jīng)網(wǎng)絡(luò)訓(xùn)練不是“能不能”的問題而是“怎么把神經(jīng)網(wǎng)絡(luò)的計(jì)算圖映射到WebGL的渲染管線上”的問題。這篇文章我就把這條路徑完整拆開講一遍。從GPU為什么適合做這件事到怎么把矩陣乘法寫成著色器到反向傳播怎么在WebGL里落地再到實(shí)際跑起來會(huì)踩哪些坑。如果你正在考慮把模型訓(xùn)練搬到瀏覽器端或者單純好奇“網(wǎng)頁(yè)里怎么跑神經(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ì)寫三層循環(huán)外層遍歷C的行中層遍歷C的列內(nèi)層做點(diǎn)積??偣惨?0億次乘加運(yùn)算?,F(xiàn)代CPU大概有8到16個(gè)核心每個(gè)核心同一時(shí)刻只能處理一個(gè)乘加不考慮指令級(jí)并行所以理論上要跑幾億個(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í)你的思維要變成“我要對(duì)每一個(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)樗鼘?duì)每個(gè)像素獨(dú)立執(zhí)行天然并行。要把矩陣乘法映射進(jìn)去做法是這樣的把矩陣A和矩陣B分別編碼成紋理。紋理的每個(gè)像素存儲(chǔ)一個(gè)浮點(diǎn)數(shù)或者用RGBA四個(gè)通道存四個(gè)數(shù)。創(chuàng)建一個(gè)和輸出矩陣C同樣大小的幀緩沖作為渲染目標(biāo)。寫一個(gè)片段著色器對(duì)于輸出紋理上的每一個(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ù)量級(jí)。2.3 精度問題WebGL的浮點(diǎn)數(shù)夠用嗎這是很多人會(huì)忽略的坑。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ì)算完再除回來。但這會(huì)增加復(fù)雜度實(shí)際項(xiàng)目中我建議直接檢測(cè)設(shè)備能力不支持highp就降級(jí)到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)代瀏覽器上支持率很高但還是要做特性檢測(cè)。3. 把神經(jīng)網(wǎng)絡(luò)拆成WebGL能吃的“圖形任務(wù)”3.1 全連接層的前向傳播一次矩陣乘法加一次激活假設(shè)你有一個(gè)簡(jiǎn)單的全連接層輸入向量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的紋理。片段著色器里對(duì)于輸出紋理的第i個(gè)像素計(jì)算W的第i行和x的點(diǎn)積再加上b[i]。第二個(gè)過程算y activation(z)。這是一個(gè)逐元素操作直接把z紋理作為輸入渲染到y(tǒng)紋理。著色器里對(duì)每個(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的部分。核心公式是對(duì)于每一層先算輸出的梯度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ì)算很簡(jiǎn)單但要注意紋理的布局——WebGL紋理是二維的你需要決定怎么把一維向量和二維矩陣對(duì)應(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è)操作本身很簡(jiǎn)單逐元素減法。但問題在于更新后的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ù)`活性大大提高而且對(duì)于小網(wǎng)絡(luò)來說傳輸開銷遠(yuǎn)小于計(jì)算開銷。讀回?cái)?shù)據(jù)時(shí)要注意readPixels是同步操作會(huì)阻塞渲染管線。如果每輪都讀可能會(huì)成為瓶頸。優(yōu)化方法是批量讀——積累幾輪的梯度再一起讀回或者用WebGL 2.0的PBO像素緩沖對(duì)象做異步讀回。但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對(duì)象。然后檢查必要的擴(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ù)會(huì)反復(fù)用到創(chuàng)建浮點(diǎn)紋理輸入是一個(gè)Float32Array輸出是一個(gè)WebGL紋理對(duì)象。注意設(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)著色器通常很簡(jiǎ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ù)看起來簡(jiǎn)單但每個(gè)都有坑。比如紋理的寬高必須是2的冪嗎在WebGL 1.0里如果使用NEAREST采樣和CLAMP_TO_EDGE可以不是2的冪。但有些驅(qū)動(dòng)會(huì)強(qiáng)制要求所以最安全的做法是padding到2的冪。我一般會(huì)把矩陣維度補(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)著色器很簡(jiǎ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)代瀏覽器對(duì)動(dòng)態(tài)循環(huán)的支持已經(jīng)不錯(cuò)了實(shí)際測(cè)試中大多數(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的緩存。但這會(huì)增加著色器的復(fù)雜度實(shí)際項(xiàng)目中如果矩陣不大比如全連接層通常幾百維直接算就夠了。4.3 激活函數(shù)與損失函數(shù)的GPU實(shí)現(xiàn)激活函數(shù)是逐元素操作實(shí)現(xiàn)起來簡(jiǎ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下可能會(huì)有精度問題特別是當(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ù)通常用交叉熵。對(duì)于分類問題交叉熵的梯度是softmax輸出減去真實(shí)標(biāo)簽。這個(gè)計(jì)算可以放在CPU做因?yàn)橹簧婕拜敵鰧佑?jì)算量小。但如果想全GPU化也可以寫一個(gè)著色器輸入是預(yù)測(cè)概率和真實(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í)測(cè)中那些文檔不會(huì)告訴你的坑5.1 紋理尺寸限制與矩陣分塊策略WebGL有一個(gè)硬性限制MAX_TEXTURE_SIZE。這個(gè)值在不同設(shè)備上不一樣低端手機(jī)可能只有2048高端顯卡能到16384。如果你的權(quán)重矩陣超過這個(gè)尺寸就必須分塊。分塊矩陣乘法的思路是把A切成若干行塊B切成若干列塊然后逐塊計(jì)算。每個(gè)塊的計(jì)算結(jié)果寫到一個(gè)臨時(shí)紋理最后拼起來。但這樣會(huì)增加繪制調(diào)用次數(shù)和紋理切換開銷。我的經(jīng)驗(yàn)是對(duì)于全連接層權(quán)重矩陣通常不會(huì)超過4096×4096那已經(jīng)是1600萬參數(shù)了所以大多數(shù)設(shè)備都能直接放下。但如果做卷積層特征圖可能很大就需要分塊。實(shí)際項(xiàng)目中我建議先檢測(cè)MAX_TEXTURE_SIZE如果矩陣維度超過限制就自動(dòng)降級(jí)到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è)備對(duì)浮點(diǎn)紋理的支持程度也不一樣。有些設(shè)備只能渲染到浮點(diǎn)紋理但不能讀取有些設(shè)備讀取時(shí)會(huì)有精度損失。一個(gè)實(shí)用的檢測(cè)方法是創(chuàng)建一個(gè)浮點(diǎn)紋理寫入一個(gè)已知值比如0.123456789然后讀回來看精度是否滿足要求。如果誤差超過1e-6就說明這個(gè)設(shè)備的浮點(diǎn)紋理不可靠需要降級(jí)。另外readPixels讀回浮點(diǎn)數(shù)據(jù)時(shí)返回的是Float32Array。但有些設(shè)備會(huì)返回Uint8Array即使你請(qǐng)求的是浮點(diǎn)格式。所以讀回后要檢查數(shù)據(jù)類型必要時(shí)做轉(zhuǎn)換。還有一個(gè)坑WebGL的texImage2D在傳入Float32Array時(shí)如果數(shù)據(jù)長(zhǎng)度和width×height×4不匹配會(huì)靜默失敗或者產(chǎn)生未定義行為。一定要確保數(shù)據(jù)長(zhǎng)度正確。我習(xí)慣在創(chuàng)建紋理前先算好width * height * 4然后檢查數(shù)組長(zhǎng)度。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版本對(duì)比。如果前向就不對(duì)那反向肯定不對(duì)。對(duì)比時(shí)要注意精度GPU的浮點(diǎn)運(yùn)算和CPU可能有微小差異但應(yīng)該在1e-5以內(nèi)。第二步檢查梯度。用數(shù)值梯度法驗(yàn)證對(duì)于某個(gè)權(quán)重w計(jì)算Loss(wε)和Loss(w-ε)然后(Loss(wε)-Loss(w-ε))/(2ε)就是數(shù)值梯度。和GPU算出的梯度對(duì)比如果差異大說明反向傳播有問題。第三步檢查參數(shù)更新。如果梯度對(duì)了但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)練對(duì)輸入尺度很敏感因?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)緩沖對(duì)象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。但要注意兼容性做好降級(jí)方案。批處理。如果訓(xùn)練數(shù)據(jù)是小樣本可以把多個(gè)樣本打包成一個(gè)批次一次前向傳播算完。這樣GPU的利用率更高因?yàn)槊總€(gè)著色器調(diào)用處理的數(shù)據(jù)量更大。實(shí)測(cè)下來一個(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)練的邊界與適用場(chǎng)景6.1 什么規(guī)模的模型適合放在瀏覽器里訓(xùn)不是所有模型都適合瀏覽器端訓(xùn)練。我的經(jīng)驗(yàn)是參數(shù)量在10萬到100萬之間的模型WebGL訓(xùn)練是可行的。超過這個(gè)規(guī)模紋理尺寸和顯存會(huì)成為瓶頸而且訓(xùn)練時(shí)間會(huì)變得不可接受。具體來說全連接層每層幾百到幾千維層數(shù)不超過5層這樣的網(wǎng)絡(luò)在瀏覽器里訓(xùn)練很流暢。卷積層也可以做但需要把卷積展開成矩陣乘法im2col這會(huì)增加內(nèi)存占用。如果卷積核不大比如3×3通道數(shù)不多比如32或64也是可以跑的。不適合的場(chǎng)景包括大型語言模型、高分辨率圖像生成模型、需要大量迭代才能收斂的模型。這些還是交給專業(yè)訓(xùn)練環(huán)境。6.2 隱私保護(hù)與離線可用性的真實(shí)價(jià)值瀏覽器端訓(xùn)練最大的賣點(diǎn)不是性能而是數(shù)據(jù)不出本地。用戶的輸入數(shù)據(jù)、標(biāo)注數(shù)據(jù)、甚至模型本身都可以完全留在瀏覽器里。這對(duì)于隱私敏感的應(yīng)用場(chǎng)景很有價(jià)值比如醫(yī)療健康類的個(gè)人數(shù)據(jù)訓(xùn)練、教育類的學(xué)生行為數(shù)據(jù)建模。另一個(gè)價(jià)值是離線可用。一旦頁(yè)面加載完成后續(xù)的訓(xùn)練和推理都不需要網(wǎng)絡(luò)連接。這對(duì)于網(wǎng)絡(luò)不穩(wěn)定的環(huán)境或者需要完全離線部署的場(chǎng)景是很實(shí)用的特性。還有一個(gè)容易被忽略的價(jià)值即時(shí)反饋。用戶補(bǔ)充幾個(gè)樣本模型立刻更新識(shí)別效果當(dāng)場(chǎ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è)通用框架它會(huì)把各種操作映射到著色器但中間有很多抽象層。對(duì)于標(biāo)準(zhǔn)操作比如全連接、卷積、常見的激活函數(shù)它的性能已經(jīng)很好。但如果你需要自定義操作或者想針對(duì)特定硬件做極致優(yōu)化自己寫著色器更靈活。另外TensorFlow.js的WebGL后端在某些設(shè)備上會(huì)有兼容性問題而且它的內(nèi)存管理是自動(dòng)的有時(shí)候會(huì)導(dǎo)致紋理泄漏或者頻繁的垃圾回收。自己管理紋理和幀緩沖雖然代碼量大但行為完全可控。我的建議是如果標(biāo)準(zhǔn)模型能滿足需求直接用TensorFlow.js省時(shí)省力。如果需要自定義訓(xùn)練邏輯或者對(duì)性能有極致要求再考慮手寫WebGL。7. 從原型到產(chǎn)品工程化落地的幾個(gè)關(guān)鍵決策7.1 如何設(shè)計(jì)降級(jí)方案保證兼容性不是所有瀏覽器都支持WebGL也不是所有支持WebGL的設(shè)備都支持浮點(diǎn)紋理。產(chǎn)品化時(shí)必須設(shè)計(jì)降級(jí)方案。我的做法是三級(jí)降級(jí)第一級(jí)WebGL 2.0 浮點(diǎn)紋理。這是最優(yōu)路徑性能最好。第二級(jí)WebGL 1.0 浮點(diǎn)紋理擴(kuò)展。性能稍差但兼容性更廣。第三級(jí)純CPU JavaScript。用TypedArray做矩陣運(yùn)算雖然慢但保證能用。對(duì)于小模型參數(shù)量小于1萬CPU版本也能在可接受的時(shí)間內(nèi)完成訓(xùn)練。降級(jí)檢測(cè)在頁(yè)面加載時(shí)做一次把結(jié)果緩存起來。用戶不需要知道底層用的是哪條路徑只需要看到訓(xùn)練能跑起來。7.2 訓(xùn)練過程的進(jìn)度反饋與中斷處理GPU訓(xùn)練是異步的你發(fā)出繪制調(diào)用后GPU在后臺(tái)跑JavaScript繼續(xù)執(zhí)行。如果訓(xùn)練循環(huán)寫成一個(gè)大的for循環(huán)頁(yè)面會(huì)卡死用戶看不到任何進(jìn)度。解決方案是用requestAnimationFrame或者setTimeout把訓(xùn)練循環(huán)拆成小批次。每一幀跑幾輪迭代然后更新進(jìn)度條再請(qǐng)求下一幀。這樣頁(yè)面保持響應(yīng)用戶能看到訓(xùn)練進(jìn)度。中斷處理也很重要。用戶可能中途關(guān)閉頁(yè)面或者切換標(biāo)簽頁(yè)。要在beforeunload事件里清理WebGL資源避免內(nèi)存泄漏。另外如果用戶切換標(biāo)簽頁(yè)requestAnimationFrame會(huì)暫停訓(xùn)練也會(huì)暫停。這是符合預(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。對(duì)于神經(jīng)網(wǎng)絡(luò)權(quán)重通常用IndexedDB。存儲(chǔ)時(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í)慣在存儲(chǔ)時(shí)帶上一個(gè)版本號(hào)或者結(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教程里都不會(huì)強(qiáng)調(diào)但做通用計(jì)算時(shí)是致命的。第二個(gè)坑是浮點(diǎn)紋理的線性插值。默認(rèn)情況下紋理采樣使用線性插值會(huì)混合相鄰像素的值。對(duì)于圖像渲染這是好事但對(duì)于矩陣運(yùn)算這是災(zāi)難。必須把TEXTURE_MIN_FILTER和TEXTURE_MAG_FILTER都設(shè)為NEAREST。我一開始忘了設(shè)結(jié)果梯度計(jì)算出來總是有微小的噪聲訓(xùn)練完全不收斂。第三個(gè)坑是幀緩沖的完整性檢查。創(chuàng)建幀緩沖后我沒有檢查checkFramebufferStatus直接就開始渲染。在某些設(shè)備上幀緩沖創(chuàng)建失敗但不會(huì)報(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)過片段著色器。這對(duì)于逐元素操作比如激活函數(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ì)算。但瀏覽器對(duì)多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)境而是在特定場(chǎng)景下提供一種輕量、隱私、即時(shí)的選擇。如果你的項(xiàng)目恰好需要這些特性WebGL方案值得一試。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月天激情小说| 99热在线观看| 国产美脚女优尤物在线观看| 亚洲人妻色图| 天天拍天天操| 男人的天堂va在线| 暖暖精品二区三区观看| 91亚洲网| 九九热九九热| 日本人妻中文字幕精品| 久久亚州高清| 色乱二区| 超碰97导航| 久热9| 超碰日韩美妻| 久久九九99| 亚洲综合嫩| 精品久热| 亚洲电影中字一区二区| 丰满人妻一区| 精品区9| 97超碰香蕉| 开心五月天激情网| 人妻二区| 欧亚揄拍偷拍精品视频| 妺妺跟我一起洗澡没忍住| 久久久女人| 色情综合网| 屁股久久久久久久久久| 日韩欧亚中文在线| 96久久科窝| 欧美1区二区三区公司 | 久久六六| 欧美91精彩| 99热网站| 黄色网址在线免费观看| AV乱伦专区| 91激情综合| 97人妻色| 国产白嫩漂亮KTV在线| 色图四区| 久久久久久久久久黄色网| 欧美男人天堂| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | AⅤ片水多多| 老女人老91妇女老热女| 深爱五月天| 日本成人免费一区二区三区| 91精品婷婷国产综合久久| 99视频内射三四| 亚洲国产精品无码AV久久| 97超碰久久色| 人人爽天天爽| 亚洲AV无码成人精品久久| 国产精品久久久 | 久久久新亚洲AV| 天美传媒在线一区| 宗合情欲网| 抽插无码高清一区| 加勒比色99999| 欧亚乱色熟一区二区三四区| 日本天天操| 少妇激情AV| 91啦人妻| 精品午夜福利| 五月天激情四射| 日日操丁香五月天| 中文字幕精品免费一区二区| 91操熟女视频| 欧美亚洲首页| 东北少妇高潮zzzz| 中文字幕99999| 人妻素股| 婷婷午夜清品久久久久久久性色视频观| 大香蕉黄色一级片免费看| 九九九九九九九九九国产精品 | 成人精品欧洲亚洲| 亚洲视频一二区| 碰碰在线视频| 九九Av| 婷婷AV一区二区三区| 免费黄色片。| 亚洲啪啪视频一区二区| 国产67194| www.五月天| 日韩性爱网址| 六月婷婷综合| 亚码激情| 久久香蕉国产线看观看猫咪av| 国产成人精品亚洲日本| 久久在肏| 日日夜夜噜| 亞洲久久直播| 在线视频 亚洲精品| 亚洲激情色片 | 亚洲最大黄网| 把腿张开老子CAO烂你| www.久久超碰| 美女主播色欲91抠b在线播放| 91狠狠| 97在线青| 日本精品高清一二区一本到| 男女无套 免费网站| 久久一本大香蕉| 超碰av在线| 欧美日韩*字幕一区| 97超视频在线观看| 大香蕉宗合网在线| 韩国一级婬片A片无码天美| 亚洲天堂另类小说男人| 中文子幕一二三| 小泽玛利亚一二三| 欧美亚洲日本视频久久久| 久久内射| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 欲色综合| 国产一区二区三区,在线观看观看| 日韩av不卡在线看| 蜜臀久久99精品久久久久久| 国产熟女二区| 91天天日| 欧美黄色大香蕉一区二区| 中文久久久| 艳美熟妇先锋一二三区| 一级黄色视频网| 日韩大香蕉AV影片| 91 国产丝袜在线播放-百度| 人妻人人澡人人爽人人| 少妇69中文| 大香蕉伊人久久| 国产v片在线免费观看| 久久久性少妇| 亚洲美女黄色| 男人天堂久久日韩| 欧美极品少妇交| 免费A V在线播放| 91老司机在线视频免费观看| 国产激情在线| 色情乱伦AV| 久久成人国产精品| 亚洲熟女乱色一区二区三区| 久久综合婷婷| 亚洲自拍小说| 亚洲熟久久| 人妻啊啊人妻啊| 国产女生在线| 国产av波波国产精品| 日日夜夜摸| 亚洲在线A| 性色av一区二区| 天天综合,91综合永久| 无码国产精品久久久久| 强奸乱伦av电影| 制度丝袜99| 亚洲做性| 91国产大片| 九九热免费国产视频婷婷伊人五月 | 日韩综合色图| 青娱乐福利99| 竹菊一区二区三区AV线| 青青操少妇| 精品视频一区二区| 大逼色网站| 97网站在线观看 | 国产又黄又粗的视频| 一级一性爱免费视频| 久久 精品| 97精品在线视频| 久久久久久久9999| 国产精品麻豆成人av| 亚洲欧美天堂| a男人的天堂久久一级A毛片| 丁香五六月啪啪| 亚洲?V无码专区在线电影| 久久久久亚洲熟妇熟女| www.久久最新地址| 精品亚洲国产成人av网站| 日韩精品在线观看观看| 91精品伊人久久久大香线蕉91| 精品人妻中文字幕高清| 操www| av天堂天堂av日韩| 欧美v亚洲v日韩v最新在线二区| 级做a爱无码性色永久免费| 强奸乱伦免费网站| 免费观看啪视频| 国产AV激情无码久久无码 | 青青国产精品在线| 男人的天堂日本东京热| 久久久com| 91超碰人人| 99国产精品免费| 国产女主播视频在线观看| 国产精品69久久久久久久| 色婷婷淫色网| 色区97| 欧美岛国精品在线观看| 91快色色色色色| 95自拍视频在线观看| 欧美日韩操逼嗦吊| 亚洲成?V人片在线观看福利| 亚洲综合码| 超碰资源亚洲97| 日本男人插女人的逼黄色| 熟妇无码视频三区| 亚洲无码偷拍| 性爱1区| 人妻夜夜爽天天爽麻豆三区网站| 99久久com免费视频′| 99色悠悠| 婷婷10月天青娱乐| 日韩视频啪啪| 欧美少妇一区二区三区| 欧美色吧综合| xxx0国产在线播放| 99操碰| 青娱乐蜜桃臀AV色婷| 久操免费电影| 欧美性爱1080p| 99999re| 在线欧美69V免费观看视频| 激情婷婷| 香蕉国产97| 人人贴人人摸| 九九九午夜| 91精品导航| 午夜αv| 操逼视频免费日韩无码| 九九拍拍精品视频在线播放| 九九九九久久久久| 一本一道人妻久久一区二区三区 | 久久二| 国产精品激情久久久久久久| 人妻少妇久久久| 后入 亚洲 美女 射| 欧美激情在线观看视频| 亚洲精品一区二区精品| 色官网在线| 人妻天天爽| 免费少妇一区二区| 精产国品一区二三产品| 欧美色综合| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 久久五月份| 很很热性爱视频| 人人妻人人色| 人人贴人人摸| 色色色热| 蜜屁av| www欧美性爱| 9精品久久| 国产精品一区二区久久精品| 久久神马影院| 日韩卡一卡二卡三在线| 日韩无码久久熟女一级片| 国产不良强奸视频免费看| 嗯啊啊啊轻点视频| 美女被啪到深处抽搐视频| 盗摄 精品 另类 一区| 欧美丝袜中文字幕07在线| 操逼日批| 亚洲www91| 日韩精品人妻一| 国产第11页| 东北丰满熟女国产一区| 色五月激情AV在线| 操逼视频亚洲| 中文字幕十五区| 思思视频免费看网站| 六月丁丁香| 无码人妻一区二区三区免费九色| av在线资源| 精品91日日夜夜超清资源| 亚洲色图久久成人| 国产伊人精品在线| 一区AV| 国产极品久久久| 日韩国产在线观看av| 曰本道人妻久久久在线不卡色视频| 一区二区免费电影久久| 二级毛片| 操久久久久久| 影音先锋日本一区二区| 国产熟女高潮一区二区三区| 亚洲91少妇| 中文?日韩?免费?精品| 婷婷99| 国产精品第一区第一页| 一区二区亚州激情久婷婷欧美| 91东京热男人的天堂| 国产1727欧美| 日韩美一区| 日韩欧美大力操| 亚洲素人综合| 啊啊啊com| 变态乱伦伪娘灌肠一区二区| 欧美色乱| 久久久专区| 五月丁香婷婷综合| 极品美女福利在线观看| 国产精品视屏| 狠肏骚人妻| 欧美性爱伊人| 天天看夜夜看日日干| 台湾佬中文娱乐网久久久久久久久久com| 久久天天艹| 天天综合网~91| 国产又色又粗又黄又爽| 97国产中文| 国产一区麻豆免费观看| 五月丁香色色网| 欧美午夜视频免费观看| 久久久9999| 妇女乱色二区| 人妻少妇精品久久久| 九九色综合| 亚洲性爱免费电影| 亚洲精品久久久久毛片A片拉屎| 清纯唯美激情四射| 91丨九色丨大屁股| 综合欧美激情网| 国产1024在线播放| 狠色婷婷久久一区二区三区_| 强奸乱伦动态污图免费 | 乱论91| 欧美日日人人天天| 超碰98综合网| 成人综合视频久久| 人人乐大香蕉| 97资源制服丝袜| 人人射人人操人人摸| 国产精品亚洲色婷婷久久久| 五月天亚洲色图| 玖玖超碰熟| 丰满精品人妻少妇久久字幕| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 国产男女无套视频免费观看| 97精品在线| 一级A啪啪啪啪| 乳欲人妻办公室奶水| 人人操人人爽人人操人人| 大香蕉伊人75| 亚洲成成熟女人综合一区二区| 中文字幕制服欧美久久一区| 亚洲欧洲视频小说在线观看| 日本三级韩三级99久久| 国产精品一二三区福利| 激情五月天网站| 久久九九99| 国产精品久久久无码aV去| 2021国产成人精品久久| 亚洲有码视频二区| 女沟厕偷窥piss小便| 69一区二区三区| 欧美综合第一页| 狠日欧美| 亚洲AV麻豆Aⅴ无码电影一| 91伊人| 国产精品美女| 久久精品福利影院| 岛国黄色大片网站| 九九成人| 国产夜夜操| 国产60区。| 久久久久久久久久久久黄色| 精品欧美日韩在线观看| 日本 情色 1区2区3区| 五月天人妻综合| 99色日| 九九九九九九九| 亚洲天天精品| 台湾佬大香蕉| 精品无码一区二区三区| 免费一级特黄特色大片在线观看看| 男人在线天堂| 操逼www.| 色99在线| 嫩草 人人网精品| 伊人大香蕉在线| 伊人丝袜美腿高跟在线观看高清| 97 亚洲 日韩 欧美 在线| 久久久久久久久久久久黄色| 少妇丝袜在线观看AV| 狠狠综合| 艾草av| 人妻少妇久久| 亚洲无线观看久久| 亚洲αv一区二区三区| 桃花色涩综合影院| 狠狠干婷婷| 久久久9品一区二区三区| 久久久久78| 免费网站观看www在线观| 9997se| 国产偷人伦激情在线观看| 国产精品日日摸夜夜添骚逼| 99性爱在线观看| 天天干少妇| 热久久国产精品视频大陆精品| 日韩三级在线观看mp4| 操b网站亚洲无码| 高精欧美色| 26uuu欧美日韩| 黄网在线播放| 亚洲AV高潮| 精品人妻一区二区蜜桃视频| 视频国产成人精品日本亚洲18| 亚洲?V高清一区二区三区尤物| 久久男人的天堂| 96麻豆精品一区二区三区| 国产极品粉嫩馒头一线天av| 九九热精品| 久久久久密臀视频| 精品免费视频国产一区| 国产最新小视频在线播放下载| 国产无马视频| 精品乱子一区二区三区99| 日本道人妻久久久在线不卡色视频| 精品一区二区成人动漫| 青青草原综合久久大伊人精品| 中文乱码99| 久操电影网| 久久这里是精品| 久久9久9久99久9久9| 久久久久久中文| 秋霞成人一级在线观看| 精爱久久| 视频国产欧美在线播放| 七久久久| 色爱天堂| 激情网五月天| 日韩91网| A 在线网址| 亚洲最大黄网| 老熟妇一区二区三区| 久久久久久久久久久免费精品| 亚洲一区二区三区四区视频| 99re在线精品78| 黄色操人| av天堂影视中文在字幕在线中文| 亚洲色悠悠久久88| 福利视频一区二区微拍| 亚州男人的天堂| 强奸乱伦大香蕉| 久久亚洲日韩熟女精品| 1000午夜黄色| 久综合国内精品自在自线| 国产福利合集| 欧美在线91| 乱欲视频| 秋霞一级A片黄色视频| 免费看片黄| 日韩欧美操逼xxx| 浓厚中出中文字幕在线| 国产精品久久久无码AV网站| 睡产熟女乱伦| 婷婷五月天伊人| 小少妇| 97中文天堂| 91殴美大片| 国内97干免费看| 亚洲极品| 欧美亚洲91| 成人26uuu| 国产精品制服丝袜清纯唯美| 色色色五月婷婷| 日本一区三级韩国| 神马久久啊啊| 久久国产精品m码| 国产又黄又粗又猛大片| 日韩亚洲精品一区二区| 成人精品在线观看| 日本一片一区| 亚洲色婷婷综合久久久久中文| 9久精品视频在线观看| 亚洲加勒比色图| 天久久久噜噜噜久久国产精品爽爽| 另类图片五月天| 国产精品国产精品国产| 久久精品久| 午夜啪啪片| 亚洲天堂,男人| 天天爽天天| 91久久久视| 天天综合香 ld视频| 久久视网78| 中文字幕人妻丝袜乱一区三区| 3P丝袜熟女 色综合| 中文日本免费高清| 91N五十路| 国产日韩中文字幕欧美| 八戒午夜福利理论片| 91色婷婷综合久久中文字幕二区| 尹人大香蕉视频在线| 91 亚洲情侣偷拍 久久| 日韩成人高清一区二区| 国产一区二区三区视频在线看| 国产女人与拘做受视频免费| 九九九九九九九九九九九免费国产| 日韩精品人妻中文字幕有码午| 色999偷自拍拍| 欧美加勒比| 国产精品成久久久久午夜午夜| 亚洲熟女性高潮久久久| 91久久久久久久| 精品人妻一二三四区视频| 少妇综合网| 五月激情小说| 天天舔日美女视频| 国产a级午夜毛片| 欧美78| www.99色| 国产SV一线| 国产精品97超碰| 成人性爱视频在线看| 青娱乐av在线| 久久久久少妇| 国产精品自拍欧美在线| 狠狠躁天天躁日日躁| 揉揉揉夜夜| 国产激情在线| 中文字幕欧美日本乱码一线二线| 美女黄站| 久草综合京东| 国产精品96| 欧美天天插| 97在线免费视频观看| 99热最新| 久久老熟女| 26uuu性| 四虎在线播放| 久久婷婷综合国际产色怕| 天堂涩涩| 伊人影院综合是一个与深夜成人在线| 天天添天天干电影| 无码高清操逼| juliaann丝袜大战黑鬼| a一区二区三区乱码在线| 久久,精品一二三| 国产精品视屏| 神马久久久久久久久久久久| 99中文字幕| 99精品在线观看| 精品国产AV一区天美传媒| 中文字幕在线观看丝袜| 夜色91| 免费9 1久久| 色黄色美女大长腿午夜视频| 天欧美在线| 亚洲色诱惑| 啊啊啊久久| 91人妻丝袜无码| 国产精品视频在线观看| AV免费在线播放一区| 夜夜操夜夜高潮夜夜爽国产精品区| 一级性爱视频免费观看| 五月婷婷六月丁香| 青娱乐淫乱1314| 三级三级三级日本99| 亚洲婷婷丁香在线| 加勒比av中文| 91精品久久久久久综合五月天| 免费超碰97久久| www.色婷婷| 国产成人拍国产亚洲精品| 蜜桃精品视频一区二区三区| 理论久久婷婷网 8| 精品亚洲国产成人av网站| 熟妇一区,二区,三区。| 7777欧美成是人在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 国产熟女高潮一区二区三区| 天美传媒国产原创中文字幕亚洲欧美另类| 91天天综合在线| 99国产精品在线观看| 在线综合色| 性色亚洲| 国产超碰欧美| 久久亚洲天天做| 精品丝袜无码一区二区三APP| 殴美日韩m| 色婷婷av在线观看| 精品欧美А∨无码黑人大荫蒂| 亚洲 欧美 另类 日韩 人妻一区| 亚洲乱伦图片视频| 亚洲精品97| 97超碰无码网| 亚洲人成网www| 2021久久国产综合精品青草| 国产精品人妻免费精品| 3P丝袜熟女 色综合| av久日| 啊嗯好大视频在线观看| 人人贴人人摸| 亚洲国产精品无码AV久久| 欧洲自拍色图gif在线| 丁香六月婷婷综合| 久综合网| 国产高清成人传媒影视| 97资源视频| 欧美高清色| 超碰综合97在线| 熟女在线视频| 日日爽夜夜爽| 欧美黄片欧美黄片xxx| 天干天干天干天天做| 综合91网| 国产农村妇女精品一| 天天做天天爱天天爽| xxx0国产在线播放| 97网色| 久草成人影片| 91亚洲不卡一区| 激情综合五月婷婷| 婷婷五月天av| 午夜精品久久久久久久99蜜桃一| 日韩精品一二三| 亚洲日韩资源| 熟女露脸激情自拍视频| 超碰地址97| 国产精品91ai| 天堂麻豆天美| 欧美亚洲美少妇一区二区| 欧中日成人免费影视| 亚洲青青青视频在线| 91美女精品| 欧美96交| 欧美人妻制服| 国产99999| 智利AV在线网| 亚州精品人妻一二三区| 国产亚洲欧洲在线观看| 亚洲天堂第一页| 男人的天堂欧美| 久久鲁夜| 99久在线精品99re8a| 97公开久久| 国产白领连续中出在线播放| 色色色色色色色色综合| 91精品国| 骚日日av| 国产精品扒开腿做爽爽爽视频| av橘色网站| 日韩三级av片| 国产AV线| 深夜福利黄片| 天天操夜夜操狠很操| 天天做日日爱夜夜爽| 五月婷婷丁香| 亚洲情色在线| 加勒比99999| 秋霞一集毛片观看| 色乱二区| 国产黄a三级三级三级av在线看| 伊人99热| 精品人妻一区二区乱码一区二区| 在线天堂999| 中文字幕第95页| 欧美AB在线| 超碰美国| 亚洲自拍天堂| 97超碰国产精品| 久久久∴| 97色在线视频| 333kkkk·亚洲com久久| 免费强奸av| 婷婷三区| 国产精品另类| 粉嫩av一区二区三区天美传媒| 超碰97综合在线| 国产黄片精品在线| 精品国产一区二区久久| 插B在线观看| 伊人一级免费黄片| 天堂岛av| 久久久91福利姬| 欧美组图日韩亚洲中文字幕| 一级A啪啪啪啪| 超清福利精品视频在线| 中文字幕 国产区| 男人 天堂 日 亚洲| 97极品无码| 亚洲欧美日韩综合在线尤物| 青青草日本中文字幕 | 日韩在线97| 久久久久久久97| 国产91久久九九免费精品无码| 色情综合网| 久久的网站啊啊啊啊啊| 久久久555| 综合网少妇| av资源在线观看少妇| 欧美综合色站| 精…码一二三区| 岛国成人av在线播放网址| 色色99| 女上位精品在线| 岛国激情视频在线观看| 99999精品成人| 啊啊啊啊啊啊啊啊视频| 激情五月天色色| 色臀aV| 国产h片在线观看视频| 思思热在线观看| 9精品久久久久| 91精品黄在线观看| 久草精品在线| 翔田千里av一区二区三区| 成年男人的天堂| 久久中久文96| 日韩乱伦视频| 免费久久9999| 欧美亚洲一级在线观看| 亚洲欧洲色情高清| 久久青青草在线视频| 七久久久| 欧美图片色五月天| 4399成人黄A片| 97se亚洲综合自| 2020中文字幕| 99热| 欧洲亚洲人妻无码中字久久三区四区| 精人妻一区二区三区| 婷婷五月色| 亚洲在线a| 亚洲日韩肥臀视频在线观看| 91在线精品一区二区三区| 玖玖综合色| 中国少妇XXXX做受| 久久嫩草国产成人一区| 久久久久久久伊人精品| 成人精品欧洲亚洲| 天天色播| 无码不卡亚洲成?人片| 亚熟在线| 国产精品婬乱一级毛片彝族| 骚日日av| 超碰公开久久网| 无码区蜜乳| 欧洲站一级二级三级h| 丁香六月激情| 亚洲乱色熟女一区| 国产丝袜一区二区三区| 亚洲成人av色网| 亚洲AV秘无码一区..| 加勒比伊人影院| 激情综合亚洲| 国产精品一区二区手机看片| 国产女人9999| 欧美性爱中文字幕无线码| 91精品丝袜久久久久久无码人妻| 无码久久亚洲高清,| 97精品久久久久中文字幕| 中文字幕在线高清男人的天堂| 亚洲在线观看| 嗯嗯啊啊用力视频免费| 一区三区啪啪| 強姦亂倫a| 久久成人东京热人妻| 性色高清在线| 91丨九色丨熟女高潮| 亚洲天堂五月天国产| 亚洲清纯综合| 亚洲视频二区 | 亚洲本色精品一区二区久久| 欧亚乱色熟一区二区三四区| 久久香蕉综合一本到3atv| 成人国产视频在线观看| 久操免费电影| 亚州综合色图| 亚洲五区熟女| 精品丰满人妻一区二区三区免费观| 欧美中文综合| 97超碰公开| 久草综合视频| 蜜伊人色综合97| 狠狠干综合| 亚洲 国产 精品一区| 内射小黄片| 激情一区二区| 成人草草视频| 丝袜高跟澳门91视频| 一区二区精品更新提醒| 国产欧美日韩女同性恋ww喷水精品| 天堂性色| 色五月69夫妻| 亚洲欧美激情另类色图| a在线观看| 成年人一级黄色毛片大全在线观看| 9 9无尺码天堂网| 欧美一区二区三区大综合| 91国产精品在线看| 大香蕉综合| 欧美一区二区亚洲天堂| 秋霞怕怕片| 国产精品剧情| 老熟女综合| 狠日欧美| 欧美精品一二三| 一二三区精品视频| 蜜桃色院一区久久 | 97在线视频观看| 日韩一二三区| 97爱亚洲| 91久久久亚洲| 国产丝袜一区二区三区| 97网站在线观看 | 天美传媒精品一区二区| 超碰地址久久| 操东北女人| 日本色色色网站免费看不卡| 亚洲综合欧美| 免费AV中文网在线观看| 不卡av免费在线网址| 韩国三级一线观看久| 亚洲欧美综合网| 天天综合网~91| 欧美综合天堂| 亚洲一区二区在线观看91| 91丝袜在线观看| 乱伦日本中文自拍| 日韩激情啪啪啪| 夜嗨影院| 婷婷久月| 亚码激情| 欧美一二在线| 色97国产69香蕉| 日韩天堂av电影在线观看| 婷婷激情一区二区三区俺也去| 欧美色五月| 97亚洲性爱| 99www.bibizy香蕉资源国产一区二区三区高清 | 国产91亚洲精品一区二区三区| 精品美女少妇一区二区| 中文熟女五十乱码在线| 青青三级视频| 久久久91| 成人av在线播放| 欧美综合区| 久久99午夜精品一区人妻| 丁香六月激情综合| 麻豆性爱视频在线播放| 色婷婷A V一二三四区麻豆综合| 青春草A| 亚洲资源吧| 国产一级内射高清视频| 两性色网| 国产在线76页| 伊人操操| 综合 亚洲 欧美| 国产一区二区三区久久久精品| 人人操人人摸avav| 可以在线观看AV的网站| 日韩大香蕉| 国产亚洲色婷婷久久99精品91 - 百度 | 国产一区96在线| 欧美亚州综合图片| 大逼色网站| 亚洲伊人a线观看视频| 久热大香蕉| 黄日韩| 美女啊啊啊啊啊啊| 在线观看色视频| 四虎影库国产精品免费| 国产外初女出血视频| 久久免费少妇| 亚洲福利中文字幕在线| 97色色色综合网站| 91性感在线| 黄片com.| 亚洲av热热色| 97超碰人操| 天天影视综合色| 丰满人妻一区二区三区四区| 美女露胸露尿口| 日韩射图| AV污污污污| 日本福利二区视频| 色综合20p| 男女啪啪啪18禁网站| 97色色视频| 欧美淫乱视频| 欧美极品性爱天天射| 女人妻一区| 中文字幕熟女人妻丝袜| 人妻22p| 久久久78| 在线观看综合精品亚洲| 91丝袜美腿片| 美女午夜福利免费视频| 99精彩视频| 亚洲欧美激情小说| 新婚人妻扶着粗大强行坐下| 蜜臀久久久国产| 久久久精精精| 国产伦精品一区二区三区在线观 | 综合国产97| 国产剧情在线| 亚洲国产第一页综合视频| 综合网亚洲在线| 欧美做爰无码A片视频| 久久久九精品| 精品国产www久久| 97视频在线视频| a片自拍直播视频| 国产自产91区13区| 成人av性爱电影在线观看| 91扒丝袜综合在线| 精品国模无码| 婷婷五月天丁香花| 男人久久天堂| 99久久久无码| 激情天天视频| 日韩美女,国产传媒,视频一区| 久久啊啊啊| 欧美日韩国第一区| 亚洲男人综合| 亚洲美女 晚间男人天堂 | 日韩精品一区,二区 九九...老司机| 欧美人体性爱互联网第一页婷婷日本| 99热只有这里有精品| 国产日韩无码一区二区三区久久区| 日本岛国黄色网址| 日韩有码专区| 女人高潮大叫一级毛片| 人人妻人人玩人人澡人人爽| 97国产成人精品免费视频| 91在线丝袜视频| 色情乱伦AV| 色色色色色色色色综合| www.色操逼| 久久老女人| 热热热热日日漂亮永久永久国产日| 一区二区乱码福利| 91色碰| 亚洲日韩美国人妻| 精产品久久| 快点操死我| 日操粉逼逼| 日韩中文字幕精品一二三事国产精品| 伊人久久大香线蕉无码| 999 久久久| 国产 无码 一区二区| 午夜一区| 欧美拳交在线播放| 啪啪免费| 久久人妻| 欧美成人国产精品| 久久黄色网址| 久久久免费一级黄片| 久久伊人最新网址视频| 男女香蕉一区二区| 人人手机欧洲亚洲国产人妻| 亚洲古典另类欧美在线| 97国产超碰| 69丨亚洲丨精品丨入口免费播放| 精品一区二区成人动漫| 久久黄片国产一区二区| 亚洲熟女人妻中文字幕一区二区| 狠狠 91| 91操人| 日本伦乱九九九综合 | 久久熟女嫩草成人片免费| 青青草视频爽一爽| 涩五月婷婷| 国产aⅴ无码片毛片一级网站| 91激情国产| 日日骚 av| 亚洲人精| 狠狠爱综合网| 一级久久久久久久久久久| 精品免费视频国产一区| 伊人玖玖网| 刺激性视频黄页| 波多野结衣一级视频| 国偷自 一区| 少妇与黑人高潮在线| 亚洲无套久久嗯嗯| 亚洲囯产精品女人久久久| 干超碰碰熟女| 中文字幕乱妇免费视频| 国精品一区二区三| 精品久久久久,69国产成人精| 99视频这有这里有精品| 国产精品美女视频诱惑| 99少妇内射| 中文字幕国产| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 色噜噜人妻丝袜AV资源| 99ri精品| 91干熟女| 国厂麻豆77q4| 欧美在线伊人色| 精品国产久热在线观看| 国产精品成人无码av无码免费| 毛片一区二区| 欧美中出| 超碰97中文| AAAA级日本片免费视频| 91色综合| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 在线观看视频91| 97超久碰| 精品97久久综合| 国产免费久久精品99re韩国| 日韩AV色图| 中文字幕88av在线| 欧美精品第四五页中文字幕在线观看| 4399成人黄A片| 另类视频在线| 国产欧美伊人| 九九热九九热| 91在线免费观看处女| 色爱国产| 国产精品色色| 少妇 综合| 欧美亚洲日本视频久久久| 久久久国产av美女私房| 欧美丝袜激情| 秋霞影音一区二区三区| 无码高清专| 亚洲一卡2卡3卡4卡乱码网站| 久久久无码精品人妻二区| 国产25页| 成年人免费观看网站| 欧美丰满少妇交换91欧美精品| 国产久久日| 国产欧美日产一区二区三区 - 国产欧美日 | 在线黄色污污网站| 好爽,再快点啊哈嗯嗯嗯嗯| 麻豆av一区二区三区| 日本 免费 一区二区三区 久久香蕉| 韩国久久97| 一区二区三区日韩欧美 | 国产中文字幕曰本毛片| 国产成人+综合亚洲+天堂| 亚洲日韩一区电影| 大香蕉伊在线久草麻豆天堂故事| 日韩一级二级| 午夜啊啊啊| 日韩欧美~中文字| 精品国产Av无码久久久伦古装| 亚洲综合嫩| 日韩免费簧片| 亚洲欧美在线观看2021| 日本熟妇一区二区三区| 欧美另类自拍 | wuyechaopeng| 极品尤物在线观看| 久久久久成人蜜桃精品| 欧美少妇性乱| 狠狠2050在线观看| 国产97亚洲| 国产性爱在线视频一区二区| 任你艹| 91天天综合网,天天综合网| 日本天堂在线播放| 国产精品 视频| 亚洲偷拍自拍在线视频| 亚洲一二三精品久久网 | 国语人妻精彩刺激| 欧美人妻精品| 国产AV线| 91P0RNY大屁股人妻| 91粉嫩萝控精品福利网站_精品影音先锋国 | 99999精品成人| 中文字幕欧洲有码| 欧美性爱综合,免费| 噜噜噜无码AV一级一级久久影院| 国产67194| 国产av高清版| 亚洲激情深爱文学小说网站| 三男一女不戴套的A片| 9999久久久久| 蜜臀av中文字幕| 综合伊人激情| 久草成人福利导航| 99视频自拍区| 亚洲暴力强奸AV| 99ri视频| 国产精品色约约| 日韩免费高清大片在线| 99热色这里只有精品| 先锋音影AV| 人人操人人摸avav| 欧亚综合一卡二卡中文字幕| 99999亚洲另类| 国产午夜无码片在线观看影视| 亚洲另类在线观看| 96精品一区| 日韩人妻中文视频| 国产精品视频| 欧美精品久久久久久久丰满| 亚州宗合另类| 日韩精品午夜操呦呦不卡影院| 91AV入口| 欧美日韩第一页| 亚洲欧美综合网站| 国产h片在线观看视频| 狠狠狠狠狠干| 深喉吞精| 久久婷婷视频| 九九九国产精品| 国产女人91精品嗷嗷嗷嗷| 婷婷五月天无码| 亚洲 自拍偷拍 欧美| 91精品丝袜久久久久久无码人妻| 91AV国产精品| 国产乱伦性爱AV| 天天搞欧美| 人成午夜免费大片| 91美女视频直播| 五月丁香综合激情| 怡红院成人视频| 色色色五月婷婷| 国产一二三福利视频网| www.色99| 精品熟女呻吟久久91| 色妹子A V| 男女日B国产| 97超视频在线观看| 老司机射| 风间由美日韩欧美久久| 成人午夜无码视频| 亚洲资源站| 视频在线观看一二三区| 日本性交操一区二区不卡系列| 天天流夜夜操| 丁香婷婷五月| 一区二区三区精品黑丝白丝酒店对鸡| 少妇特黄一区二区三区| 偷看洗澡一二三区美女| 亚欧洲日韩国产精品| 日本有码影片下载| 伊人操你| 日韩人妻精品| 九九九热精品| 九九99精品视频在线观看| 亚洲色图欧美| 加勒比综合九九99视频在线播放| 欧洲久久一二线| 免费网站观看www在线观| 青娱乐淫乱1314| 在线情色电影 91大| www色色com| 日韩欧美亚洲自拍偷拍| 97人妻色| 亚洲中文字幕在现观看| 夜夜人妻爽| 97福利视频| 操操操五月天婷婷丁香影院| 精品一区96| 精品国产www久久| 我想要 啊 啊 啊| 久久一二三四五六七八九区区| 久热在线精品免费观看| 国产丰满少妇久久久精品影院| 天天干天天燥| 久久久久成人网| 97 视频在线|