日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ARM CPU自动调度神经网络

發布時間:2023/11/28 生活经验 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM CPU自动调度神经网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ARM CPU自動調度神經網絡
對特定設備和工作負載進行自動調度,對于獲得最佳性能至關重要。通過RPC使用自動調度器為ARM CPU調度整個神經網絡。
為了自動調度神經網絡,將網絡劃分為小的子圖,進行獨立調度。每個子圖被視為一個搜索任務。任務調度程序對時間進行分片,為這些任務動態分配時間資源。任務調度程序預測每個任務對端到端執行時間的影響,確定最大程度地減少執行時間的任務的優先級。
對于每個子圖,使用compute聲明tvm/python/topi,獲取張量表達式形式的計算DAG。使用自動調度器來構造此DAG的搜索空間,搜索良好的調度(低級優化)。
與手動模板定義搜索空間的基于模板的autotvm不同,自動調度程序不需要任何調度模板。換句話說,自動調度程序僅在其中使用計算聲明tvm/python/topi,而不使用現有的調度模板。
本文無法在Windows或最新版本的macOS上運行。要使其運行,需要將本文的內容包裝在一個if name == “main”:塊中。
import numpy as np

import tvm
from tvm import relay, auto_scheduler
import tvm.relay.testing
from tvm.contrib import graph_runtime
from tvm.contrib.utils import tempdir
定義網絡
首先,需要使用Relay中繼前端API定義網絡。從加載一些預定義的網絡tvm.relay.testing。還從MXNet,ONNX,PyTorch和TensorFlow加載模型。
對于卷積神經網絡,盡管自動調度程序在任何布局下正常工作,使用NHWC布局通常實現最佳性能。使用自動調度程序對NHWC布局實施了更多優化。建議將模型轉換為NHWC布局以使用自動調度程序。使用ConvertLayout傳遞在TVM中進行布局轉換。
def get_network(name, batch_size, layout=“NHWC”, dtype=“float32”):
“”“Get the symbol definition and random weight of a network”""

# auto-scheduler prefers NHWC layout
if layout == "NHWC":image_shape = (224, 224, 3)
elif layout == "NCHW":image_shape = (3, 224, 224)
else:raise ValueError("Invalid layout: " + layout)input_shape = (batch_size,) + image_shape
output_shape = (batch_size, 1000)if name.startswith("resnet-"):n_layer = int(name.split("-")[1])mod, params = relay.testing.resnet.get_workload(num_layers=n_layer,batch_size=batch_size,layout=layout,dtype=dtype,image_shape=image_shape,)
elif name.startswith("resnet3d-"):n_layer = int(name.split("-")[1])mod, params = relay.testing.resnet.get_workload(num_layers=n_layer,batch_size=batch_size,layout=layout,dtype=dtype,image_shape=image_shape,)
elif name == "mobilenet":mod, params = relay.testing.mobilenet.get_workload(batch_size=batch_size, layout=layout, dtype=dtype, image_shape=image_shape)
elif name == "squeezenet_v1.1":assert layout == "NCHW", "squeezenet_v1.1 only supports NCHW layout"mod, params = relay.testing.squeezenet.get_workload(version="1.1",batch_size=batch_size,dtype=dtype,image_shape=image_shape,)
elif name == "inception_v3":input_shape = (batch_size, 3, 299, 299) if layout == "NCHW" else (batch_size, 299, 299, 3)mod, params = relay.testing.inception_v3.get_workload(batch_size=batch_size, dtype=dtype)
elif name == "mxnet":# an example for mxnet modelfrom mxnet.gluon.model_zoo.vision import get_modelassert layout == "NCHW"block = get_model("resnet50_v1", pretrained=True)mod, params = relay.frontend.from_mxnet(block, shape={"data": input_shape}, dtype=dtype)net = mod["main"]net = relay.Function(net.params, relay.nn.softmax(net.body), None, net.type_params, net.attrs)mod = tvm.IRModule.from_expr(net)return mod, params, input_shape, output_shape

啟動RPC跟蹤器
TVM使用RPC會話與ARM板進行通信。在調度期間,調諧器會將生成的代碼發送到電路板上,測量電路板上的代碼速度。
為了擴大調度范圍,TVM使用RPC Tracker來管理分布式設備。RPC跟蹤器是一個集中式控制器節點。將所有設備注冊到跟蹤器。例如,如果有10部電話,全部注冊到跟蹤器,并行運行10次測量,從而加快了調諧過程。
要啟動RPC跟蹤器,在主機上運行此命令。在整個調度過程中都需要使用跟蹤器,因此需要為此命令打開一個新終端:
python -m tvm.exec.rpc_tracker --host=0.0.0.0 --port=9190
預期的輸出是
INFO:RPCTracker:bind to 0.0.0.0:9190
將設備注冊到RPC跟蹤器
現在,將設備注冊到跟蹤器。第一步是為ARM設備構建TVM運行時。
? 對于Linux:遵循本節在設備上構建TVM運行時,以在設備上構建TVM運行時。然后通過以下方式將設備注冊到跟蹤器
? python -m tvm.exec.rpc_server --tracker=[HOST_IP]:9190 --key=rasp4b-64
(用[HOST_IP]主機的IP地址代替)
? 對于Android:在Android設備上安裝TVM RPC APK。確保通過android rpc測試。已經注冊了設備。在調度過程中,必須轉到開發人員選項,啟用“更改時保持屏幕喚醒”并為手機充電以使其穩定。
注冊設備后,通過查詢rpc_tracker進行確認
python -m tvm.exec.query_rpc_tracker --host=0.0.0.0 --port=9190
例如,如果有2個Huawei mate10 pro,11個具有64位操作系統的Raspberry Pi 4B和2個rk3399,則輸出是
Queue Status

key total free pending

mate10pro 2 2 0
rk3399 2 2 0
rasp4b-64 11 11 0

將多個設備注冊到跟蹤器,以加快調諧過程中的測量速度。
設置調度選項
調度之前,應該應用一些配置。以帶有64位操作系統(Ubuntu 20.04)的Raspberry Pi 4b 4GB主板為例。在設置中,應該相應地修改目標和device_key。如果使用的是Android手機,use_ndk設置為True。

DEVICE CONFIG

Replace “aarch64-linux-gnu” with the correct target of your board.

This target is used for cross compilation. You can query it by :code:gcc -v on your device.

FIXME(tmoreau89, merrymercy): We leave ‘-device=arm_cpu’ out of the target string

because we’re sharing x86 op strategy.

target = tvm.target.Target(“llvm -mtriple=aarch64-linux-gnu -mattr=+neon”)

Also replace this with the device key in your tracker

device_key = “rasp4b-64”

Set this to True if you use ndk tools for cross compiling

And also set the environment variable below to point to the cross compiler

use_ndk = False

os.environ[“TVM_NDK_CC”] = “/usr/bin/aarch64-linux-gnu-g++”

TUNING OPTION

network = “mobilenet”
batch_size = 1
layout = “NHWC”
dtype = “float32”
log_file = “%s-%s-B%d-%s.json” % (network, layout, batch_size, target.kind.name)
提取搜索任務
接下來,從網絡中提取搜索任務及其權重。任務的權重是該任務的子圖在整個網絡中的出現次數。通過使用權重,將網絡的端到端延遲近似為,sum(latency[t] * weight[t])其中是任務的延遲,latency[t]weight[t]是任務的權重。任務調度程序將僅優化此目標。

Extract tasks from the network

print(“Extract tasks…”)
mod, params, input_shape, output_shape = get_network(network, batch_size, layout, dtype=dtype)
tasks, task_weights = auto_scheduler.extract_tasks(mod[“main”], params, target)

for idx, task in enumerate(tasks):
print("========== Task %d (workload key: %s) ==========" % (idx, task.workload_key))
print(task.compute_dag)
出去:
Extract tasks…
========== Task 0 (workload key: [“d7b65649a4dd54becea0a52aabbc5af5”, 1, 1000, 1, 1000]) ==========
placeholder = PLACEHOLDER [1, 1000]
T_softmax_maxelem(i0) max= placeholder[i0, k]
T_softmax_exp(i0, i1) = tir.exp((placeholder[i0, i1] - T_softmax_maxelem[i0]))
T_softmax_expsum(i0) += T_softmax_exp[i0, k]
T_softmax_norm(i0, i1) = (T_softmax_exp[i0, i1]/T_softmax_expsum[i0])

========== Task 1 (workload key: [“9847f8cc0b305137f49f2c5c0c8ab25d”, 1, 1024, 1000, 1024, 1000, 1, 1000]) ==========
placeholder = PLACEHOLDER [1, 1024]
placeholder = PLACEHOLDER [1000, 1024]
T_dense(i, j) += (placeholder[i, k]*placeholder[j, k])
placeholder = PLACEHOLDER [1000]
T_add(ax0, ax1) = (T_dense[ax0, ax1] + placeholder[ax1])

========== Task 2 (workload key: [“69115f188984ae34ede37c3b8ca40b43”, 1, 7, 7, 1024, 1, 1, 1, 1024]) ==========
placeholder = PLACEHOLDER [1, 7, 7, 1024]
tensor(ax0, ax1, ax2, ax3) += placeholder[ax0, ((ax17) + rv0), ((ax27) + rv1), ax3]
tensor(ax0, ax1, ax2, ax3) = (tensor[ax0, ax1, ax2, ax3]/(float32((select((bool)1, ((ax1 + 1)*7), (((ax1 + 1)7) + 1)) - (ax17)))*float32((select((bool)1, ((ax2 + 1)*7), (((ax2 + 1)7) + 1)) - (ax27)))))

========== Task 3 (workload key: [“6b7583cf23c7c37d3212cad9d06e58c1”, 1, 7, 7, 1024, 1, 1, 1024, 1024, 1, 1, 1, 1024, 1, 7, 7, 1024]) ==========
placeholder = PLACEHOLDER [1, 7, 7, 1024]
PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
placeholder = PLACEHOLDER [1, 1, 1024, 1024]
Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
placeholder = PLACEHOLDER [1, 1, 1, 1024]
T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 4 (workload key: [“06fce76bd84cb904eee50b905ca9449a”, 1, 7, 7, 1024, 3, 3, 1024, 1, 1, 1, 1, 1024, 1, 7, 7, 1024]) ==========
placeholder = PLACEHOLDER [1, 7, 7, 1024]
PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 8)) && (i2 >= 1)) && (i2 < 8)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
placeholder = PLACEHOLDER [3, 3, 1024, 1]
DepthwiseConv2d(b, i, j, c) += (PaddedInput[b, (i + di), (j + dj), c]*placeholder[di, dj, c, 0])
placeholder = PLACEHOLDER [1, 1, 1, 1024]
T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 5 (workload key: [“6b7583cf23c7c37d3212cad9d06e58c1”, 1, 7, 7, 512, 1, 1, 512, 1024, 1, 1, 1, 1024, 1, 7, 7, 1024]) ==========
placeholder = PLACEHOLDER [1, 7, 7, 512]
PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
placeholder = PLACEHOLDER [1, 1, 512, 1024]
Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
placeholder = PLACEHOLDER [1, 1, 1, 1024]
T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 6 (workload key: [“c87ba68bc180312f5716af09a77ca15b”, 1, 14, 14, 512, 3, 3, 512, 1, 1, 1, 1, 512, 1, 7, 7, 512]) ==========
placeholder = PLACEHOLDER [1, 14, 14, 512]
PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 15)) && (i2 >= 1)) && (i2 < 15)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
placeholder = PLACEHOLDER [3, 3, 512, 1]
DepthwiseConv2d(b, i, j, c) += (PaddedInput[b, ((i2) + di), ((j2) + dj), c]*placeholder[di, dj, c, 0])
placeholder = PLACEHOLDER [1, 1, 1, 512]
T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 7 (workload key: [“6b7583cf23c7c37d3212cad9d06e58c1”, 1, 14, 14, 512, 1, 1, 512, 512, 1, 1, 1, 512, 1, 14, 14, 512]) ==========
placeholder = PLACEHOLDER [1, 14, 14, 512]
PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
placeholder = PLACEHOLDER [1, 1, 512, 512]
Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
placeholder = PLACEHOLDER [1, 1, 1, 512]
T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 8 (workload key: [“06fce76bd84cb904eee50b905ca9449a”, 1, 14, 14, 512, 3, 3, 512, 1, 1, 1, 1, 512, 1, 14, 14, 512]) ==========
placeholder = PLACEHOLDER [1, 14, 14, 512]
PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 15)) && (i2 >= 1)) && (i2 < 15)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
placeholder = PLACEHOLDER [3, 3, 512, 1]
DepthwiseConv2d(b, i, j, c) += (PaddedInput[b, (i + di), (j + dj), c]*placeholder[di, dj, c, 0])
placeholder = PLACEHOLDER [1, 1, 1, 512]
T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 9 (workload key: [“6b7583cf23c7c37d3212cad9d06e58c1”, 1, 14, 14, 256, 1, 1, 256, 512, 1, 1, 1, 512, 1, 14, 14, 512]) ==========
placeholder = PLACEHOLDER [1, 14, 14, 256]
PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
placeholder = PLACEHOLDER [1, 1, 256, 512]
Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
placeholder = PLACEHOLDER [1, 1, 1, 512]
T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 10 (workload key: [“c87ba68bc180312f5716af09a77ca15b”, 1, 28, 28, 256, 3, 3, 256, 1, 1, 1, 1, 256, 1, 14, 14, 256]) ==========
placeholder = PLACEHOLDER [1, 28, 28, 256]
PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 29)) && (i2 >= 1)) && (i2 < 29)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
placeholder = PLACEHOLDER [3, 3, 256, 1]
DepthwiseConv2d(b, i, j, c) += (PaddedInput[b, ((i2) + di), ((j2) + dj), c]*placeholder[di, dj, c, 0])
placeholder = PLACEHOLDER [1, 1, 1, 256]
T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 11 (workload key: [“6b7583cf23c7c37d3212cad9d06e58c1”, 1, 28, 28, 256, 1, 1, 256, 256, 1, 1, 1, 256, 1, 28, 28, 256]) ==========
placeholder = PLACEHOLDER [1, 28, 28, 256]
PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
placeholder = PLACEHOLDER [1, 1, 256, 256]
Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
placeholder = PLACEHOLDER [1, 1, 1, 256]
T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 12 (workload key: [“06fce76bd84cb904eee50b905ca9449a”, 1, 28, 28, 256, 3, 3, 256, 1, 1, 1, 1, 256, 1, 28, 28, 256]) ==========
placeholder = PLACEHOLDER [1, 28, 28, 256]
PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 29)) && (i2 >= 1)) && (i2 < 29)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
placeholder = PLACEHOLDER [3, 3, 256, 1]
DepthwiseConv2d(b, i, j, c) += (PaddedInput[b, (i + di), (j + dj), c]*placeholder[di, dj, c, 0])
placeholder = PLACEHOLDER [1, 1, 1, 256]
T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 13 (workload key: [“6b7583cf23c7c37d3212cad9d06e58c1”, 1, 28, 28, 128, 1, 1, 128, 256, 1, 1, 1, 256, 1, 28, 28, 256]) ==========
placeholder = PLACEHOLDER [1, 28, 28, 128]
PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
placeholder = PLACEHOLDER [1, 1, 128, 256]
Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
placeholder = PLACEHOLDER [1, 1, 1, 256]
T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 14 (workload key: [“c87ba68bc180312f5716af09a77ca15b”, 1, 56, 56, 128, 3, 3, 128, 1, 1, 1, 1, 128, 1, 28, 28, 128]) ==========
placeholder = PLACEHOLDER [1, 56, 56, 128]
PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 57)) && (i2 >= 1)) && (i2 < 57)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
placeholder = PLACEHOLDER [3, 3, 128, 1]
DepthwiseConv2d(b, i, j, c) += (PaddedInput[b, ((i2) + di), ((j2) + dj), c]*placeholder[di, dj, c, 0])
placeholder = PLACEHOLDER [1, 1, 1, 128]
T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 15 (workload key: [“6b7583cf23c7c37d3212cad9d06e58c1”, 1, 56, 56, 128, 1, 1, 128, 128, 1, 1, 1, 128, 1, 56, 56, 128]) ==========
placeholder = PLACEHOLDER [1, 56, 56, 128]
PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
placeholder = PLACEHOLDER [1, 1, 128, 128]
Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
placeholder = PLACEHOLDER [1, 1, 1, 128]
T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 16 (workload key: [“06fce76bd84cb904eee50b905ca9449a”, 1, 56, 56, 128, 3, 3, 128, 1, 1, 1, 1, 128, 1, 56, 56, 128]) ==========
placeholder = PLACEHOLDER [1, 56, 56, 128]
PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 57)) && (i2 >= 1)) && (i2 < 57)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
placeholder = PLACEHOLDER [3, 3, 128, 1]
DepthwiseConv2d(b, i, j, c) += (PaddedInput[b, (i + di), (j + dj), c]*placeholder[di, dj, c, 0])
placeholder = PLACEHOLDER [1, 1, 1, 128]
T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 17 (workload key: [“6b7583cf23c7c37d3212cad9d06e58c1”, 1, 56, 56, 64, 1, 1, 64, 128, 1, 1, 1, 128, 1, 56, 56, 128]) ==========
placeholder = PLACEHOLDER [1, 56, 56, 64]
PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
placeholder = PLACEHOLDER [1, 1, 64, 128]
Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
placeholder = PLACEHOLDER [1, 1, 1, 128]
T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 18 (workload key: [“c87ba68bc180312f5716af09a77ca15b”, 1, 112, 112, 64, 3, 3, 64, 1, 1, 1, 1, 64, 1, 56, 56, 64]) ==========
placeholder = PLACEHOLDER [1, 112, 112, 64]
PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 113)) && (i2 >= 1)) && (i2 < 113)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
placeholder = PLACEHOLDER [3, 3, 64, 1]
DepthwiseConv2d(b, i, j, c) += (PaddedInput[b, ((i2) + di), ((j2) + dj), c]*placeholder[di, dj, c, 0])
placeholder = PLACEHOLDER [1, 1, 1, 64]
T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 19 (workload key: [“6b7583cf23c7c37d3212cad9d06e58c1”, 1, 112, 112, 32, 1, 1, 32, 64, 1, 1, 1, 64, 1, 112, 112, 64]) ==========
placeholder = PLACEHOLDER [1, 112, 112, 32]
PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
placeholder = PLACEHOLDER [1, 1, 32, 64]
Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
placeholder = PLACEHOLDER [1, 1, 1, 64]
T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 20 (workload key: [“06fce76bd84cb904eee50b905ca9449a”, 1, 112, 112, 32, 3, 3, 32, 1, 1, 1, 1, 32, 1, 112, 112, 32]) ==========
placeholder = PLACEHOLDER [1, 112, 112, 32]
PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 113)) && (i2 >= 1)) && (i2 < 113)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
placeholder = PLACEHOLDER [3, 3, 32, 1]
DepthwiseConv2d(b, i, j, c) += (PaddedInput[b, (i + di), (j + dj), c]*placeholder[di, dj, c, 0])
placeholder = PLACEHOLDER [1, 1, 1, 32]
T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)

========== Task 21 (workload key: [“98418eda02701ddd175ad50e364a0638”, 1, 224, 224, 3, 3, 3, 3, 32, 1, 112, 1, 1, 1, 112, 1, 1, 1, 112, 112, 32]) ==========
placeholder = PLACEHOLDER [1, 224, 224, 3]
PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 225)) && (i2 >= 1)) && (i2 < 225)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
placeholder = PLACEHOLDER [3, 3, 3, 32]
Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy2) + ry), ((xx2) + rx), rc]*placeholder[ry, rx, rc, ff])
placeholder = PLACEHOLDER [1, 112, 1, 1]
T_multiply(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3]*placeholder[ax0, ax1, 0, 0])
placeholder = PLACEHOLDER [1, 112, 1, 1]
T_add(ax0, ax1, ax2, ax3) = (T_multiply[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, 0, 0])
T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
調優與評估
設置一些選項來優化和啟動搜索任務
? num_measure_trials是在調度期間使用的測量試驗的次數。將其設置為較小的數字(例如200)以進行快速演示。實際上,建議將其設置為800 * len(tasks),通常足以使搜索收斂。例如,resnet-50中有29個任務,因此將其設置為20000。根據時間預算調度。
? 此外,還用RecordToFile將測量記錄轉儲到日志文件中,些測量記錄可用于最好地查詢歷史記錄,恢復搜索以及以后進行更多分析。
? 有關更多參數auto_scheduler.TuningOptions, 參見auto_scheduler.LocalRunner。
自動調度后,使用發現的最佳調度來編譯網絡。在自動調度期間,所有測量記錄都將轉儲到日志文件中,因此讀取日志文件并加載最佳調度。
def tune_and_evaluate():
print(“Begin tuning…”)
tuner = auto_scheduler.TaskScheduler(tasks, task_weights)
tune_option = auto_scheduler.TuningOptions(
num_measure_trials=200, # change this to 20000 to achieve the best performance
runner=auto_scheduler.RPCRunner(
device_key,
host=“0.0.0.0”,
port=9191,
timeout=30,
repeat=1,
min_repeat_ms=200,
enable_cpu_cache_flush=True,
),
measure_callbacks=[auto_scheduler.RecordToFile(log_file)],
)

tuner.tune(tune_option)# Compile with the history best
print("Compile...")
with auto_scheduler.ApplyHistoryBest(log_file):with tvm.transform.PassContext(opt_level=3, config={"relay.backend.use_auto_scheduler": True}):lib = relay.build(mod, target=target, params=params)# Export library
tmp = tempdir()
if use_ndk:from tvm.contrib import ndkfilename = "net.so"lib.export_library(tmp.relpath(filename), ndk.create_shared)
else:filename = "net.tar"lib.export_library(tmp.relpath(filename))# Upload module to device
print("Upload...")
remote = auto_scheduler.utils.request_remote(device_key, "0.0.0.0", 9191, timeout=10000)
remote.upload(tmp.relpath(filename))
rlib = remote.load_module(filename)# Create graph runtime
ctx = remote.cpu()
module = graph_runtime.GraphModule(rlib["default"](ctx))
data_tvm = tvm.nd.array((np.random.uniform(size=input_shape)).astype(dtype))
module.set_input("data", data_tvm)# Evaluate
print("Evaluate inference time cost...")
ftimer = module.module.time_evaluator("run", ctx, repeat=3, min_repeat_ms=500)
prof_res = np.array(ftimer().results) * 1e3  # convert to millisecond
print("Mean inference time (std dev): %.2f ms (%.2f ms)" % (np.mean(prof_res), np.std(prof_res))
)

We do not run the tuning in our webpage server since the server doesn’t have a Raspberry Pi,

or device tracker running.

Uncomment the following line to run it by yourself.

tune_and_evaluate()

筆記
調度期間解釋打印的信息
在調度期間,控制臺上會打印很多信息。用于調試目的。最重要的信息是任務調度程序的輸出。下表是示例輸出。

------------------------------ [ Task Scheduler ]

| ID | Latency (ms) | Speed (GFLOPS) | Trials |

| 0 | 0.013 | 0.31 | 64 |
| 1 | 0.845 | 2.43 | 448 |
| 2 | 0.046 | -0.00 | 64 |
| 3 | 4.194 | 24.53 | 2112 |
| 4 | 0.109 | 9.21 | 64 |
| 5 | 1.759 | 29.27 | 896 |
| 6 | 0.083 | 6.01 | 64 |
| 7 | 3.084 | 33.38 | 7680 |
| 8 | 0.136 | 14.78 | 384 |
| 9 | 1.349 | 38.23 | 768 |
| 10 | 0.133 | 7.55 | 128 |
| 11 | 2.747 | 37.56 | 1536 |
| 12 | 0.338 | 11.87 | 192 |
| 13 | 1.295 | 40.00 | 704 |
| 14 | 0.482 | 4.16 | 256 |
| 15 | 2.686 | 38.56 | 1344 |
| 16 | 0.884 | 9.08 | 448 |
| 17 | 1.332 | 39.18 | 704 |
| 18 | 1.045 | 3.84 | 576 |
| 19 | 1.391 | 38.09 | 704 |
| 20 | 0.777 | 10.34 | 448 |
| 21 | 0.739 | 30.97 | 448 |

Estimated total latency: 38.347 ms Trials: 19992 Used time : 19260 s Next ID: 3
下表列出了所有任務的延遲和(估計)速度。列出了所有任務的測量試驗分配。最后一行顯示這些任務的總加權延遲,粗略估計網絡的端到端執行時間。最后一行還顯示測量試驗的總數,自動調度所花費的總時間,以及要調度的下一個任務的ID。
將出現一些“ dmlc :: Error”錯誤,因為自動調度程序將嘗試一些無效的調度。如果繼續進行調度,則放心地忽略,因為這些錯誤與主要過程是隔離的。
筆記
提前終止調度
通過強制終止此過程來提前終止調度。只要在日志文件中為每個任務至少獲得一個有效的調度,就應該能夠進行編譯(下面的部分)。
其他技巧

  1. 在調度過程中,自動調度器需要編譯許多程序并從中提取功能。該部分占用大量CPU,建議使用具有多個內核的高性能CPU,以加快搜索速度。
  2. 用來提取大型日志文件,而僅保存最有用的記錄。python3 -m tvm.auto_scheduler.measure_record --mode distill -i log.json
  3. 從上一個日志文件繼續搜索。load_log_file在function中創建任務調度程序時,只需添加一個新參數run_tuning。
    tuner = auto_scheduler.TaskScheduler(tasks, task_weights, load_log_file=log_file)
  4. 如果有多個目標CPU,則全部用于測量以并行化測量。檢查本節 以了解如何使用RPC跟蹤器和RPC服務器。要在自動調度使用RPC跟蹤, 用auto_scheduler.RPCRunner更換轉輪TuningOptions。

總結

以上是生活随笔為你收集整理的ARM CPU自动调度神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品欧美一区二区三区不卡 | 一级a毛片高清视频 | 国产一区久久久 | 国产品久精国精产拍 | 久草在线最新 | 99超碰在线播放 | 97精品一区二区三区 | 亚洲人久久| 久久精品麻豆 | 国产美女视频免费观看的网站 | 美女视频网站久久 | 91一区啪爱嗯打偷拍欧美 | 久久夜色精品国产欧美一区麻豆 | 国产精品99久久久久久人免费 | 国产成人精品区 | 国产福利在线免费 | 99热精品国产一区二区在线观看 | 国产精品精品国产色婷婷 | 欧美粗又大| 成人四虎 | 久热电影 | 国产三级国产精品国产专区50 | 在线观看视频一区二区三区 | 免费视频a | 久草免费福利在线观看 | 日韩在线观看精品 | 天天操夜夜操天天射 | 午夜精品一区二区三区四区 | 国产精品美女久久久久久网站 | 草在线视频 | 亚洲精品影院在线观看 | 欧美激情视频在线免费观看 | 精品国产免费久久 | 亚洲精品在线观看的 | 国产精品久久久久影院 | 色综合久久综合中文综合网 | 在线免费高清视频 | 伊人春色电影网 | www,黄视频 | 亚洲国产av精品毛片鲁大师 | 成人在线免费观看网站 | 免费看成人av | 久久免费av电影 | www.久久精品视频 | 亚洲区另类春色综合小说 | 91日韩在线播放 | 色噜噜狠狠色综合中国 | 麻豆视频在线看 | 日韩av电影手机在线观看 | 一区二区三区免费 | 久久精品99久久久久久 | 亚洲综合色激情五月 | 人人爽人人片 | 一级黄色片毛片 | 成人黄色电影在线观看 | 国产专区视频在线观看 | 午夜视频在线观看欧美 | 亚洲精品欧美视频 | 麻豆综合网 | 日韩深夜在线观看 | 久香蕉 | 性色va| 精品国产乱码久久久久久浪潮 | 久久国产精品99久久久久久丝袜 | 成人久久18免费 | 在线av资源| 国产精品第 | 欧美在线视频一区二区三区 | 免费中文字幕 | 亚洲国产成人精品久久 | 99福利片| 视频一区二区免费 | 日本一区二区不卡高清 | 亚洲黄色在线观看 | 亚洲精品视频久久 | 亚洲精品美女久久久久 | 99久热在线精品视频观看 | 成人一区二区三区在线观看 | 夜夜干夜夜 | 玖玖精品在线 | 久久久国产一区二区三区 | 99色婷婷 | www.黄色在线 | 日韩视频在线播放 | 国产精品毛片完整版 | 韩国av免费 | 伊人狠狠色 | 国产精品igao视频网网址 | av解说在线 | 亚洲国产wwwccc36天堂 | 国产精品一区二区三区在线 | www.亚洲精品 | 亚洲免费av一区二区 | 美女视频黄频 | 国产二区精品 | 人人天天夜夜 | www.天天色 | 四虎国产精品成人免费4hu | 久久久久免费精品国产小说色大师 | 免费日韩 精品中文字幕视频在线 | 国产一区二区在线免费观看 | 国产玖玖在线 | 国产精品欧美久久 | 91成人午夜 | 亚洲欧美激情精品一区二区 | 久久99久久99精品 | 性色在线视频 | 在线视频欧美日韩 | 亚洲精品乱码 | 久久久久国产一区二区三区四区 | 韩国av免费看 | av+在线播放在线播放 | 黄网站app在线观看免费视频 | 亚洲精品网页 | 超碰在线个人 | 中文字幕免费成人 | 亚洲欧美日韩国产精品一区午夜 | 日韩在线二区 | 中文字幕日本特黄aa毛片 | 国产一区二区久久 | 国产精品一区二区三区99 | 国产高清网站 | 三级毛片视频 | 成人中文字幕+乱码+中文字幕 | 国产精品手机在线观看 | 国产精品久久久久久久av大片 | 黄色免费视频在线观看 | 99久久久国产精品免费观看 | 成人久久久久久久久 | 国产午夜精品福利视频 | 亚洲婷婷综合色高清在线 | 色婷婷av国产精品 | 视频在线亚洲 | 中文字幕永久 | 视频91 | 免费av福利 | av中文字幕在线免费观看 | 韩日视频在线 | 久久人人爽视频 | 日韩在线精品 | 热久久最新地址 | 欧美精品中文在线免费观看 | av.com在线 | 亚洲欧美日本一区二区三区 | 在线日韩精品视频 | 九九精品久久 | 91视频免费网站 | 国产精品欧美日韩在线观看 | 午夜视频在线网站 | 久久99久久久久久 | 天天人人综合 | 福利视频一二区 | 制服丝袜一区二区 | 亚洲高清精品在线 | 黄色视屏免费在线观看 | 国产一二三四在线视频 | 亚洲成人av片 | 国产手机av在线 | 91精品1区2区 | 日韩av一区二区三区四区 | 亚洲国产精品激情在线观看 | 99精品视频99 | 91麻豆精品国产自产在线游戏 | 五月婷婷丁香在线观看 | 中文字幕欧美日韩va免费视频 | 久精品视频免费观看2 | 99视频在线免费看 | 久久精品老司机 | 91麻豆精品91久久久久同性 | 国产美女网站在线观看 | 国产一区二区三区久久久 | 国产一级久久 | 久久久久国产视频 | 亚洲人成影院在线 | 成年人视频在线免费 | 久久国产精品久久久 | 999久久国产精品免费观看网站 | 97偷拍视频 | 久久久精品小视频 | 亚洲精品乱码久久 | 成人午夜电影免费在线观看 | 国产黄网在线 | 久香蕉 | 久久精品免费看 | 亚洲精品在线视频播放 | 操操日 | 国产精品 日韩 | 亚洲精品videossex少妇 | 四虎影视精品永久在线观看 | 日韩高清在线一区二区三区 | 一区二区观看 | 午夜在线观看影院 | 91在线观看视频网站 | 日韩免费久久 | 久久免费国产精品 | 国产成人精品一区一区一区 | 国产成人亚洲在线电影 | 国产黄色片久久久 | 天天摸天天舔 | 国产精品女同一区二区三区久久夜 | 色综合五月 | 日韩一区二区三区不卡 | 欧美999| 超碰大片 | 人人爽人人爽 | 亚洲精品1234区 | 亚洲综合色视频在线观看 | 国产一二区精品 | 亚洲 欧美 综合 在线 精品 | 天天干天天干天天射 | 久久乐九色婷婷综合色狠狠182 | 在线视频观看亚洲 | 欧美成人亚洲成人 | 久久精品国产免费 | 91完整版在线观看 | 精品久久久久国产 | 91久久电影| 亚洲成人av片 | 黄色一级免费网站 | 亚洲成人av电影在线 | 精品1区2区 | 欧美成人在线免费 | 久草国产在线观看 | 久久久精品国产免费观看一区二区 | 在线观看的av | 精品免费国产一区二区三区四区 | 97日日碰人人模人人澡分享吧 | 久久伦理网 | 91精品国产高清自在线观看 | a成人v| 91在线最新| 视频国产在线观看18 | 色网站在线免费 | 午夜精品福利在线 | 成人av亚洲 | 综合网五月天 | 色a在线观看| 色小说在线| 九九免费在线观看 | 亚洲精品在线观看中文字幕 | 国产精品久久久久久一区二区三区 | 波多野结衣在线播放视频 | 亚洲高清在线观看视频 | 国产男男gay做爰 | 国产一区二区精品久久91 | 日韩一区二区三区不卡 | www.狠狠操.com | 欧美久久久一区二区三区 | 精品国产1区二区 | 国产在线a不卡 | 免费在线视频一区二区 | 综合久久网 | 天天色天天 | 91九色在线观看视频 | 久久久久日本精品一区二区三区 | 亚洲国内精品在线 | 97日日| 最新av网站在线观看 | 美女免费视频观看网站 | 香蕉一区| 99国产精品一区 | 免费久久久久久久 | 久久99久久精品 | 天天干天天天天 | 精品久久久久久久久亚洲 | 午夜天使 | 九九九热精品免费视频观看网站 | 天堂av在线网 | 色在线免费观看 | 久久视频这里只有精品 | 日韩sese | 五月精品 | av再线观看 | 91人人爽久久涩噜噜噜 | 97国产大学生情侣白嫩酒店 | 又黄又爽又湿又无遮挡的在线视频 | 久青草国产在线 | 国产精品一区二区三区久久久 | 免费黄色av| 国产一区二区日本 | 日本特黄一级 | 国产精品久久久久久久久久久久久久 | 黄色一级大片在线免费看产 | 成人性生爱a∨ | 色视频网站免费观看 | 久草视频中文在线 | 97人人艹| 少妇视频一区 | 成年人黄色免费网站 | 中日韩欧美精彩视频 | 91精品国产网站 | 日本三级大片 | 国产精品久久久久久一区二区 | 精品在线播放视频 | 日本久久中文字幕 | 久久情侣偷拍 | 国产黄色免费电影 | 婷婷色网视频在线播放 | 四虎影视精品永久在线观看 | 国偷自产中文字幕亚洲手机在线 | 日韩欧美在线影院 | 亚洲欧美日韩不卡 | 在线看片日韩 | 高清国产午夜精品久久久久久 | 天天综合色天天综合 | 国产一级免费电影 | 在线成人欧美 | 欧美精品久久久久 | 欧美最新另类人妖 | 在线成人中文字幕 | 久热只有精品 | 成年人电影免费在线观看 | 免费视频国产 | 五月天中文在线 | 97超碰人人 | 国产精品久久久久四虎 | 国产精品久久片 | 人九九精品 | 欧美精品免费在线 | 国产精品字幕 | 怡红院成人在线 | 一区二区三区视频 | 成人aⅴ视频 | 久久久久国产精品厨房 | 欧美精品亚州精品 | 婷婷六月天综合 | 爱射综合 | 人人狠狠综合久久亚洲婷 | 日韩av一区二区三区 | 91精品秘密在线观看 | 亚洲最新av网站 | 色婷婷午夜| 亚洲国产免费 | 在线视频久 | 国产精品2018 | 日韩免费电影一区二区 | www.久久久.com | 韩日精品在线 | 色综合久久五月天 | 久久另类视频 | 国产精品久久久 | 黄色av成人在线观看 | 婷婷色吧| 久久免费99| 国内精品久久久久久久久久久久 | 久久精品一区二区国产 | 中文字幕在线观看视频一区二区三区 | 国产精品资源在线观看 | 日韩大片在线免费观看 | 99久久国产免费看 | 天天射网站| 日韩久久影院 | 午夜av在线免费 | 在线视频一二区 | 天天激情天天干 | 国产伦精品一区二区三区免费 | 香蕉视频在线视频 | 久草视频在线观 | 五月婷婷黄色 | 91丨九色丨蝌蚪丰满 | www.久久婷婷| 国产在线日韩 | 激情偷乱人伦小说视频在线观看 | 午夜av网站| 9在线观看免费高清完整 | 久久精品视频中文字幕 | 久草视频在线新免费 | 中文字幕视频网 | 国产最新在线 | 精品在线视频一区二区三区 | 精品夜夜嗨av一区二区三区 | 成 人 免费 黄 色 视频 | 久久亚洲综合色 | 日韩精品免费在线视频 | 日韩日韩日韩日韩 | 亚洲国产中文字幕在线观看 | 亚洲免费在线播放视频 | 在线小视频国产 | 91在线免费播放视频 | 水蜜桃亚洲一二三四在线 | 中文字幕在线国产精品 | 国产视频一区在线 | 国产亚洲视频在线观看 | www.黄色小说.com | 免费黄色一区 | 久久精品国产久精国产 | 成人国产精品久久久久久亚洲 | 91av在线精品 | 夜夜爽夜夜操 | h网站免费在线观看 | 99视频在线观看一区三区 | 婷婷六月激情 | 激情开心| 久草剧场 | 精品免费观看 | 国产操在线 | 碰天天操天天 | 国产免费亚洲 | 韩日精品在线 | 黄色毛片在线看 | 美女久久 | 日韩有色 | 97人人爽人人 | 91久久国产露脸精品国产闺蜜 | 91精品国产综合久久婷婷香蕉 | 亚洲精品视频在线观看免费视频 | 国产精品成人av电影 | 日韩在线不卡 | 亚洲一级久久 | 久久国产精品一区二区三区 | 久久国产三级 | 日韩综合精品 | av成人在线播放 | 中文字幕免费成人 | 国产高清亚洲 | 亚洲伦理中文字幕 | 在线亚洲高清视频 | 九九九九色| 日韩欧美综合视频 | 成人理论在线观看 | 久草热视频 | 国产精品 中文字幕 亚洲 欧美 | 日韩精品无| 国产精品igao视频网网址 | 免费裸体视频网 | 久草在 | 中文字幕久久精品 | 9在线观看免费高清完整版在线观看明 | a黄色一级 | 国产中的精品av小宝探花 | 99视频精品在线 | 成人免费av电影 | 久久久久草 | 国产视频日韩视频欧美视频 | 五月开心网 | 91精品爽啪蜜夜国产在线播放 | 天堂在线一区二区 | 亚洲精品美女在线 | 天天综合狠狠精品 | 91专区在线观看 | 九九综合九九 | 国产中文字幕av | 成人性生活大片 | 精品一区二区三区在线播放 | 成年人国产精品 | 在线免费国产 | 亚洲一区二区三区在线看 | 成人免费观看完整版电影 | 成人h视频在线播放 | 亚洲成人免费观看 | 国产黄色在线观看 | 国产黄色在线看 | 黄色成人影院 | 日韩免费看视频 | 国产不卡精品 | 精品自拍sae8—视频 | 96视频在线 | 99久久99久久精品免费 | 手机av电影在线观看 | 九九色在线 | 国产成人精品在线观看 | 日本性生活一级片 | 91九色视频观看 | 99精品在线 | 91视频免费看网站 | 91传媒免费观看 | 丁香婷婷基地 | 久久国产免费 | 久久伊人综合 | 涩涩资源网 | 久久国产精品成人免费浪潮 | 97av视频| 国产精品视频专区 | 国产免费片| 国产精品久久久久免费观看 | 天天综合色| 丁香婷婷综合五月 | 六月激情 | 亚洲精品高清一区二区三区四区 | 国产97在线播放 | 手机av电影在线观看 | 久久天天躁狠狠躁亚洲综合公司 | 成人久久影院 | 精品在线免费视频 | 国产精品6| 91 中文字幕 | 69国产精品视频免费观看 | 五月婷婷导航 | www黄色 | 久久尤物电影视频在线观看 | 成在人线av | 91激情在线视频 | 人人插超碰 | www.天天操.com | 成人av亚洲 | 午夜10000| 96亚洲精品久久 | 88av网站 | 91亚洲精品乱码久久久久久蜜桃 | 国产一区二区日本 | 久草网在线观看 | 日韩理论在线视频 | 成人午夜电影免费在线观看 | 中文字幕亚洲综合久久五月天色无吗'' | 人人干网站 | 天堂在线一区二区 | 精品久久久久久久久久国产 | 久久综合久久综合这里只有精品 | 成人亚洲精品国产www | 91九色性视频 | 五月天精品视频 | 人人爽久久久噜噜噜电影 | 欧美午夜理伦三级在线观看 | 国产精品丝袜在线 | 国产精品久久99精品毛片三a | 亚洲五月花 | 久久高清免费视频 | 91在线区 | 国产亚洲视频在线 | www国产在线| 在线电影日韩 | 黄色免费观看网址 | 国产精品美女久久久 | 亚洲日本黄色 | 天天操天天操天天操天天操天天操 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 色狠狠婷婷 | 国产在线第三页 | 国产v在线播放 | av最新资源 | 免费国产在线观看 | 欧美日韩亚洲在线观看 | 在线免费观看视频一区 | 国产免费中文字幕 | 亚洲婷婷伊人 | 玖玖在线看 | 久久久久久久久久久电影 | 国产一级在线免费观看 | 久久精品com | 久久99免费观看 | 狠狠干综合 | 国内视频在线 | 亚洲欧美精品一区 | 69久久久 | 网站在线观看你们懂的 | 久久avav | 色综合久久久久久中文网 | 久久久久日本精品一区二区三区 | 黄色片免费电影 | 免费观看av网站 | 在线观看视频福利 | 中文字幕在线电影 | 亚洲精品综合久久 | 麻豆视频在线免费观看 | 久久国产成人午夜av影院潦草 | 色综合天天干 | 91免费视频网站在线观看 | 久久久久久久国产精品 | 日韩免费网站 | 精品国产成人av | 三级黄色理论片 | av短片在线 | 91麻豆精品国产91久久久使用方法 | 91禁在线看 | 久久69精品久久久久久久电影好 | 婷婷精品在线 | 久久手机免费观看 | 美女久久久久 | 国产精品理论片在线观看 | 久久一视频| 高清在线一区二区 | 日韩成人看片 | 欧美一区二区在线 | 91香蕉视频| 久久视频精品 | 国产精品mv在线观看 | 国产精品第三页 | 97视频免费看 | 伊人国产视频 | 人人爱爱人人 | 超碰久热| 欧美a级成人淫片免费看 | 国产精品久久久久久久久久久不卡 | 日韩欧美不卡 | 友田真希av| 在线精品亚洲一区二区 | 日韩精品在线观看av | 免费久久网 | 国产一级片网站 | 99久久精品国产一区二区三区 | 精品成人久久 | 天天干天天干天天干 | 最近中文字幕高清字幕免费mv | 国产精品女人久久久 | 91喷水 | 中文字幕在线免费观看视频 | 天天拍天天色 | 973理论片235影院9 | 久久亚洲综合国产精品99麻豆的功能介绍 | 久久久久久久久久久福利 | 最近的中文字幕大全免费版 | 99 国产精品 | 精品在线观看一区二区三区 | 亚洲色影爱久久精品 | 精品国产伦一区二区三区观看方式 | 久草精品视频在线播放 | 国产在线a视频 | 亚洲va韩国va欧美va精四季 | 免费福利在线视频 | 欧美在线视频免费 | 国产又粗又猛又爽又黄的视频先 | 日韩国产精品久久久久久亚洲 | 欧美在线观看小视频 | 国产成a人亚洲精v品在线观看 | 成人资源网 | 免费看在线看www777 | 久久精品99国产精品亚洲最刺激 | 成人在线视频免费观看 | 国产一区二区在线视频观看 | 奇米影视四色8888 | 中文字幕a∨在线乱码免费看 | 亚洲黄色激情小说 | 中文字幕日韩电影 | 午夜久久 | 91av在线看 | 中文字幕日韩在线播放 | 久久精品一二三 | 91爱看片| 欧美一区在线观看视频 | 国产精品第一页在线观看 | 麻豆视频在线免费 | 亚洲午夜不卡 | 91视频最新网址 | www国产亚洲精品久久网站 | 成年人看片网站 | 成人在线播放视频 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 午夜视频在线观看网站 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 黄色片视频免费 | 黄色三级在线 | 久久 精品一区 | 麻花豆传媒一二三产区 | 国产色久 | 久久国产精品一区二区 | 99国产在线视频 | 日韩深夜在线观看 | 亚洲欧美国内爽妇网 | 综合久久久| 日韩黄色一区 | 国产色婷婷 | 亚洲午夜精品在线观看 | 精品国产理论片 | 免费看的黄色 | 日韩在线观看视频一区二区三区 | 日日爱网址 | 亚洲视频一 | 日韩精品在线视频 | 成人黄色免费在线观看 | 国产成人高清av | 久久精品视频一 | 伊人国产在线观看 | 久久精品婷婷 | 808电影免费观看三年 | 成人在线视频在线观看 | 天天在线操| 青草草在线视频 | 伊人色综合久久天天网 | av免费在线播放 | 国产视频日韩视频欧美视频 | 中文字幕一区二区三区精华液 | av黄色影院 | 欧美调教网站 | 亚洲另类人人澡 | 特黄色大片 | 婷婷深爱网 | 国产老熟| 大荫蒂欧美视频另类xxxx | 午夜精品一区二区三区免费视频 | 91av欧美 | 99视频+国产日韩欧美 | 久久久在线视频 | 日本在线中文在线 | 欧美视频在线二区 | 成人午夜网址 | 国产精品情侣视频 | 精品国产伦一区二区三区观看说明 | 伊人国产在线播放 | 欧美综合色在线图区 | 日日夜夜综合 | 久久国产视屏 | 伊人av综合 | 天天天干天天射天天天操 | 国产午夜三级一区二区三 | 日韩av电影网站在线观看 | 最新av免费在线观看 | 国产亚洲精品免费 | 亚洲 综合 专区 | 五月开心婷婷网 | 爱爱av网| 国模视频一区二区 | 日韩精品一区二区三区免费视频观看 | 国产永久免费 | 黄色一级片视频 | 国产精品网站一区二区三区 | 国产高清免费在线观看 | 亚洲视频第一页 | 成人app在线播放 | 国产人成精品一区二区三 | 欧美成人精品在线 | 中文字幕亚洲情99在线 | 亚洲视频精选 | 国产经典av| 亚洲免费精品一区二区 | 日韩国产精品久久久久久亚洲 | 在线 高清 中文字幕 | 青草视频在线播放 | 91污污| 国产高清不卡在线 | 三级黄色a | 伊色综合久久之综合久久 | 日韩欧美视频在线播放 | 婷婷视频在线观看 | 午夜精品一区二区三区免费 | 激情五月婷婷 | 国产精品视频永久免费播放 | 超碰97人人爱| 亚洲闷骚少妇在线观看网站 | 亚洲国产成人在线观看 | av资源网在线播放 | av女优中文字幕在线观看 | 国产精品久久久久久久久免费看 | 国产精品一区二区在线观看 | 天天做天天干 | 免费人做人爱www的视 | 摸bbb搡bbb搡bbbb | 少妇18xxxx性xxxx片 | 操操操人人人 | 国产麻豆剧传媒免费观看 | 97超碰在线免费观看 | 免费网站v | 天天色天天射天天操 | 国产黄色片网站 | 国产理论在线 | 五月天天av| 精品电影一区二区 | 福利区在线观看 | 中文字幕在线观看国产 | 天天干天天射天天爽 | av成人亚洲 | 超碰在线免费97 | 久久成 | 91av视频在线观看免费 | 97在线观看免费观看高清 | 色中射 | 亚洲视频综合 | 国产成人久久 | 国产伦理久久 | 国语久久| 久久亚洲电影 | 综合中文字幕 | 免费a级黄色毛片 | 久草视频在线资源站 | 五月婷婷六月丁香激情 | 激情综合中文娱乐网 | 天天爽人人爽 | 13日本xxxxxⅹxxx20 | 色婷婷精品大在线视频 | 99精品免费久久久久久日本 | 日韩最新在线视频 | 中文字幕免费高清在线 | 日本三级不卡视频 | 日韩在线视频线视频免费网站 | 中文字幕黄色网址 | 久艹视频在线观看 | 国产精品久久久久一区二区国产 | 色偷偷88888欧美精品久久久 | 国产又粗又长又硬免费视频 | av看片在线 | 午夜久久久久久久 | 六月色丁 | 香蕉在线播放 | 国产色在线观看 | 99re久久精品国产 | 美女视频久久 | 日日夜夜操操操操 | 国产最新福利 | 免费污片| 国产成人免费在线观看 | 夜色成人网 | 成人免费影院 | 精品女同一区二区三区在线观看 | 精品亚洲视频在线观看 | 一区二区 不卡 | 天天操天天干天天插 | 免费试看一区 | 国产一区不卡在线 | 中国一级片在线播放 | 久久精品三级 | 国产69精品久久久久99尤 | 久久久久福利视频 | 亚洲国产高清在线 | 玖草影院 | av大片网站| 在线精品视频免费播放 | 五月婷婷丁香综合 | 五月花婷婷 | 国模视频一区二区 | 天天色天天操综合网 | 久久免费a | 激情网站免费观看 | 狠狠狠狠狠狠干 | a天堂最新版中文在线地址 久久99久久精品国产 | 天天人人| 欧美日韩免费观看一区=区三区 | 狠狠躁日日躁夜夜躁av | 欧美黄色成人 | av免费观看高清 | 91网免费看 | 成人免费观看视频网站 | 在线观看亚洲国产精品 | 日韩在线理论 | 国产一区视频免费在线观看 | 夜添久久精品亚洲国产精品 | 在线观看视频色 | 亚洲欧美视频一区二区三区 | 国产黄a三级三级三级三级三级 | 亚洲视频www | 久久国产精品免费看 | 国产麻豆精品久久一二三 | 午夜视频一区二区 | www久久久久| 永久av免费在线观看 | 欧美日韩不卡一区二区三区 | 亚洲欧洲xxxx| 69av免费视频 | 日韩二区三区在线 | 在线观看国产一区二区 | 天天操天天射天天 | 综合精品在线 | 精品国产1区2区 | 国产精品一区二区在线看 | 制服丝袜一区二区 | 五月天天在线 | www.夜色321.com| 曰本三级在线 | 麻豆一区在线观看 | 久久免费看a级毛毛片 | 欧美日韩综合在线 | 日韩中文在线观看 | www欧美xxxx| 天天干天天操av | 免费看高清毛片 | 免费观看视频的网站 | 91欧美国产 | 99久久日韩精品视频免费在线观看 | 亚洲最新精品 | 中文字幕一区av | 天天草天天摸 | 超碰国产人人 | 亚洲综合视频网 | 国产一区二区电影在线观看 | 视频在线观看亚洲 | 久久婷婷亚洲 | 亚洲天堂社区 | 国产免费专区 | 欧美在线观看禁18 | 一级成人免费视频 | 国产高清专区 | 亚洲闷骚少妇在线观看网站 | 色午夜影院 | 亚洲永久字幕 | 久久视频网址 | 亚洲精品美女在线 | 亚洲欧美日韩精品久久久 | 91视频麻豆视频 | 国产黑丝一区二区三区 | 亚洲日本va午夜在线电影 | 在线观看中文字幕视频 | 久久综合九色九九 | 黄色特一级片 | 日本韩国在线不卡 | 欧美在线视频第一页 | 亚洲91av| 日韩欧美91 | 国产精品乱码久久久久久1区2区 | 亚洲国产精品电影 | 日韩欧美一区二区三区黑寡妇 | 亚洲视频在线免费看 | 深夜福利视频一区二区 | 久久综合久久综合这里只有精品 | 成人av网站在线播放 | 美女视频黄在线观看 | 99操视频 | 深爱婷婷激情 | 夜夜操狠狠操 | 国产麻豆精品久久一二三 | 国产精品一区二区三区久久久 | 国产激情小视频在线观看 | 91成人免费在线 | 久久久久久影视 | 亚洲免费观看视频 | 九九九在线 | 夜夜躁日日躁 | 久久久国产99久久国产一 | 国产传媒一区在线 | 91尤物国产尤物福利在线播放 | 国产精品麻豆免费版 | 精品国产乱码久久久久久1区二区 | 中文乱幕日产无线码1区 | 99精品国产免费久久久久久下载 | 色婷婷久久一区二区 | 久久精品视频在线观看免费 | 精久久久久 | 国产精品久久久久久久久久ktv | 99视频免费看 | 九九在线免费视频 | 亚洲精品免费看 | 国产不卡一区二区视频 | 色综合天天色综合 | 天天综合网~永久入口 | 嫩小bbbb摸bbb摸bbb | 五月婷婷视频在线 | 国产99久久久国产精品免费看 | 免费国产一区二区 | 波多野结衣一区 | 五月婷婷一区二区三区 | 婷婷干五月 | 日日摸日日添日日躁av | 欧美在线一 | 91av在线免费看 | 91精品夜夜| 成年人黄色av | 91正在播放| a天堂最新版中文在线地址 久久99久久精品国产 | 波多野结衣在线视频免费观看 | 国产成人三级 | 久久伊人色综合 | 久久成人一区 | 欧美日韩天堂 | 亚洲精品456在线播放第一页 | 国产高清免费视频 | 成人高清av在线 | 国产69久久精品成人看 | 国产精选视频 | 中文字幕日韩av | 99草在线视频 | 黄色三级免费 | 国产精品久久久久久久毛片 | 香蕉日日| 麻豆传媒视频观看 | 亚洲无吗天堂 | 亚洲最新av在线网址 | 麻豆免费观看视频 | 久久国产精品视频免费看 | 99九九免费视频 | 久久久久女教师免费一区 | 天天操天天操一操 | 国产二级视频 | 97福利 | 国产在线播放不卡 | 国产特黄色片 | 久久热亚洲 | 中文久草 | 精品麻豆入口免费 | 亚洲欧美va | 91网在线 | 九九九视频在线 | 66av99精品福利视频在线 | 亚洲视频高清 | 国产精品videossex国产高清 | 在线中文字幕电影 | 亚洲人成网站精品片在线观看 | 国产高清在线永久 | 91大神在线看 | 欧美动漫一区二区三区 | 麻豆传媒视频在线播放 | 奇米影视777四色米奇影院 | 精品免费久久久久 | 天天天天天天天天操 | 99热这里只有精品久久 | 91福利免费 | 精品久久久久久国产偷窥 | 少妇性色午夜淫片aaaze | 天天拍天天爽 | 久久女同性恋中文字幕 | www.色就是色| 亚洲情感电影大片 | 中文字幕视频一区二区 | 免费福利小视频 | 久久草在线精品 | 免费观看黄色12片一级视频 | 久草精品视频在线播放 | 久久成人国产精品免费软件 | 视频国产区 | 夜夜夜影院 | 天天天天综合 | 亚洲精品视频免费看 |