你有没有碰到过这种情形, 就是当你训练好了一个新的模型之后, 有时候你不想费神去编写那个Flask Code(也就是web框架), 也不想把模型进行容器化并且在某个环境里运行它, 只是想要借助API马上就能使用这个模型?
要是你存在这样的需求, 那必然是会希望去了解的。它属于是一个基于某种情况的推理服务器, 近期推出了有着GA(遗传算法)的版本, 而这是一款专门为生产环境所设计构造的具备高性能的服务器。
使用它, 能够确保, 在本地构建模型, 且这种构建的模型, 与投入生产环境后的模型, 是保持一致状态的。
本文以几个图像模型为例,向您介绍如何使用 。
数据集
我们所要运用的数据集是MNIST, 其所包含的是张数为70,000的灰度呈现的、像素为28×28的有关服装的图像, 这些图像覆盖了10个不一样的类别具体像上衣、连衣裙、外套、裤子等等。
若您打算令本文里的代码再现, 务必要保证把文件下载下来, 且将其解开压缩, 放置到名为 data 的地方, 鉴于文件个头极度大, 存储库里把它们给省略掉了。
1.训练 -learn 模型
首先, 我们会运用 -learn 构架去训练一个支持向量机, 简称为 SVM, 的模型。而后, 我们要把模型存放至一个称作 -MNIST 的文件里边。
import pandas as pd
from sklearn import svm
import time
import joblib
#Load Training Data
train = pd.read_csv('../../data/fashion-mnist_train.csv', header=0)
y_train = train['label']
X_train = train.drop(['label'], axis=1)
classifier = svm.SVC(kernel="poly", degree=4, gamma=0.1)
#Train Model
start = time.time()
classifier.fit(X_train.values, y_train.values)
end = time.time()
exec_time = end-start
print(f'Execution time: {exec_time} seconds')
#Save Model
joblib.dump(classifier, "Fashion-MNIST.joblib")1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.
须留意, SVM算法并非格外适配大型数据集, 缘由在于其具备二次性质。依据您的硬件状况, 在此示例里的模型将会耗费几分钟时间来进行训练。
2.服务于 -learn 模型
经循着上面那些步骤, 我们获取到了一个名为MNIST的模型文件, 紧接着, 来瞧瞧怎样借助它去提供服务。
首先,通过如下命令安装 :pip 。
尽管额外的运行时组件属于可选范畴, 然而在服务模型之际会更为顺畅, 故而我们也会去安装 -Learn 以及 的扩展。
完成pip – -操作后,就需要添加如下两个配置文件:
(1).json- 这包含服务器本身的配置。
(2).model-.json- , 按字面意思理解, 这个文件里面涵盖着将要去运行的模型配置。
对于.json文件,只定义一个参数就足够了:
{
"debug": "true"
}1.2.3.
这一model-.json的文件, 是需要更多信息的, 原因在于它务必要知晓服务之中的模型信息。
{
"name": "fashion-sklearn",
"implementation": "mlserver_sklearn.SKLearnModel",
"parameters": {
"uri": "./Fashion_MNIST.joblib",
"version": "v1"
}
}1.2.3.4.5.6.7.8.

name参数给出了唯一识标, 它在多个模型的服务情形之际很有用处, 这一点过后会提及。要去界定以便预建起服务器, 假若存在这种服务器的话。它跟在训练模型所运用的机器学习框架紧密相连。于我们的实例当中运用 -learn去训练模型, 因而会借助 -learn来达成。配置之时得给出模型文件的所在位置以及版本编号。
经过之上提及的配置, 便能够运用如下命令来给我们的模型予以服务: start。
简单来讲, 当下已然使得模型于本地服务器那儿运行起来了。此刻, 其现已能够接纳诸如 HTTP 以及 gRPC(默认端口是 8080 和 8081)这般的请求了。
3.测试模型
模型已然启动, 且在正常运行着, 此刻, 让我们去发送一些请求, 以此来测试它的运行状况。
我们会通过如下URL 发送一个 POST 请求:
:8080/v2/////infer
此URL所表达的意思是, 去访问先前训练好的那个-lea模型, 在此处, 仅仅需要把带有-的模型名字予以替换, 与此同时, 还得把之以v1去进行替换才行。
下述代码呈现怎样去导入测试数据, 朝着模型服务器发出请求, 接着把结果跟实际标签予以比较。
import pandas as pd
import requests
#Import test data, grab the first row and corresponding label
test = pd.read_csv('../../data/fashion-mnist_test.csv', header=0)
y_test = test['label'][0:1]
X_test = test.drop(['label'],axis=1)[0:1]
#Prediction request parameters
inference_request = {
"inputs": [
{
"name": "predict",
"shape": X_test.shape,
"datatype": "FP64",
"data": X_test.values.tolist()
}
]
}
endpoint = "http://localhost:8080/v2/models/fashion-sklearn/versions/v1/infer"
#Make request and print response
response = requests.post(endpoint, json=inference_request)
print(response.text)
print(y_test.values)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.
运行上面的test.py之后,会从 得到以下响应:
"model_name": "fashion-sklearn",
"model_version": "v1",
"id": "31c3fa70-2e56-49b1-bcec-294452dbe73c",
"parameters": null,
"outputs": [
{
"name": "predict",
"shape": [
1
],
"datatype": "INT64",
"parameters": null,
"data": [
0
]
}
]
}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.
知道从响应里能够晓得, 生成可了一个请求身份标识, 并且自动添加上了给服务请求所用的模型以及版本的元数据。一旦模型投入进产品生产环节, 收集类似这般的的元数据就变得格外重要起来。它能让我们记录每一个请求, 进而便利地开展审计以及故障排查工作。
您或许也留意到, 返回一个数组。尽管于请求里仅发送了一行数据, 然而处理批量请求, 且一并返回。我们甚至能够借助一种称作自适应批处理的技术, 来优化在生产环境中处理多个请求的方式。
于上述其中示例里, 亦能够找寻到模型所预测出的结果。.data显示模型已将这个样本标记成了类别0(数值0对应着类别t-shirt/top)此般情况下此样本的真实的标签0也是如此, 所以能够证实模型得到的是正确的预测。
4.训练 模型
依循上面所举的例子, 我们知悉了怎样去运用, 从而创建单个模型, 紧接着, 让我们瞧瞧该如何处置, 在不同框架里训练的多个模型。
依旧使用 MNIST 数据集,但这次将训练模型。
import pandas as pd
import xgboost as xgb
import time
#Load Training Data
train = pd.read_csv('../../data/fashion-mnist_train.csv', header=0)
y_train = train['label']
X_train = train.drop(['label'], axis=1)
dtrain = xgb.DMatrix(X_train.values, label=y_train.values)
#Train Model
params = {
'max_depth': 5,
'eta': 0.3,
'verbosity': 1,
'objective': 'multi:softmax',
'num_class' : 10
}
num_round = 50
start = time.time()
bstmodel = xgb.train(params, dtrain, num_round, evals=[(dtrain, 'label')], verbose_eval=10)
end = time.time()
exec_time = end-start
print(f'Execution time: {exec_time} seconds')
#Save Model
bstmodel.save_model('Fashion_MNIST.json')1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.
上边用来训练模型的代码, 跟之前用来训练 -learn 模型的代码相似, 然而这次, 为了让我们的模型兼容 的格式, 把它存成了.json 文件。
5.服务多个模型

主要的一个优点在于能够支持多模型服务, 这所蕴含的意思是, 不需要针对所部署的每个ML模型去创建或者运行新的服务器, 借助上述构建而成的模型, 会运用这个功能同时为它们供给服务。
一旦启动, 它会于目录以及其中任何子目录里搜寻model-.json文件。要是您存在多个model-.json文件, 那它会自动给所有文件赋予服务。
留意: 您依旧仅需指明根目录里的那种, (服务器配置)文件.json。
这是目录结构的细分以供参考:
.
├── data
│ ├── fashion-mnist_test.csv
│ └── fashion-mnist_train.csv
├── models
│ ├── sklearn
│ │ ├── Fashion_MNIST.joblib
│ │ ├── model-settings.json
│ │ ├── test.py
│ │ └── train.py
│ └── xgboost
│ ├── Fashion_MNIST.json
│ ├── model-settings.json
│ ├── test.py
│ └── train.py
├── README.md
├── settings.json
└── test_models.py1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.
提请留意着, 存在着两个名为model-.json的文件, 其中一个是应用于-learn模型的, 另一个是应用于另一模型的。
现在可以运行 start .,它将开始处理两个模型的请求。
[mlserver] INFO – Loaded model 'fashion-sklearn' succesfully.
[mlserver] INFO – Loaded model 'fashion-xgboost' succesfully.1.2.
6.测试多个模型的准确性
当前, 有着两个模型, 它们都处于运行的状态, 且运行的平台是特定的那个, 在这里, 我们能够运用测试集中所包含的样本, 以此用来验证每一个模型所具备的准确性。
有这样一段代码, 它会向每一个模型送去一个批处理请求, 此请求涵盖完整的测试集, 将预测值跟真实标签予以比较, 在整个测试集上去执行这个操作, 这为我们给出了衡量每个模型准确性的方式, 并且会把最终结果打印出来。
import pandas as pd
import requests
import json
#Import the test data and split the data from the labels
test = pd.read_csv('./data/fashion-mnist_test.csv', header=0)
y_test = test['label']
X_test = test.drop(['label'],axis=1)
#Build the inference request
inference_request = {
"inputs": [
{
"name": "predict",
"shape": X_test.shape,
"datatype": "FP64",
"data": X_test.values.tolist()
}
]
}
#Send the prediction request to the relevant model, compare responses to training labels and calculate accuracy
def infer(model_name, version):
endpoint = f"http://localhost:8080/v2/models/{model_name}/versions/{version}/infer"
response = requests.post(endpoint, json=inference_request)
#calculate accuracy
correct = 0
for i, prediction in enumerate(json.loads(response.text)['outputs'][0]['data']):
if y_test[i] == prediction:
correct += 1
accuracy = correct / len(y_test)
print(f'Model Accuracy for {model_name}: {accuracy}')
infer("fashion-xgboost", "v1")
infer("fashion-sklearn", "v1")1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.
结果表明, 模型略微优于 SVM -learn 模型:
Model Accuracy for fashion-xgboost: 0.8953
Model Accuracy for fashion-sklearn: 0.8641.2.
总结
望以之上所述, 您已明晰运用服务模型之大体流程。若欲知悉更多讯息, 您得去研读相关文档, 还要查看不同框架之示例。
若是用户, 能够运用来在里提供予以模型, 倘若当作用户, 即应明确知晓Core, 它是一个把模型部署到的开源工具, 其在后台运用。WWw.M.nffqi.cN/Article/details/309390.shtml
WWw.M.nffqi.cN/Article/details/194530.shtml
WWw.M.nffqi.cN/Article/details/393874.shtml
WWw.M.nffqi.cN/Article/details/445304.shtml
WWw.M.nffqi.cN/Article/details/987391.shtml
WWw.M.nffqi.cN/Article/details/323542.shtml
WWw.M.nffqi.cN/Article/details/934783.shtml
WWw.M.nffqi.cN/Article/details/148240.shtml
WWw.M.nffqi.cN/Article/details/794720.shtml
WWw.M.nffqi.cN/Article/details/383183.shtml
WWw.M.nffqi.cN/Article/details/669542.shtml
WWw.M.nffqi.cN/Article/details/650828.shtml
WWw.M.nffqi.cN/Article/details/847151.shtml
WWw.M.nffqi.cN/Article/details/108858.shtml
WWw.M.nffqi.cN/Article/details/827150.shtml
WWw.M.nffqi.cN/Article/details/169663.shtml
WWw.M.nffqi.cN/Article/details/534983.shtml
WWw.M.nffqi.cN/Article/details/978123.shtml
WWw.M.nffqi.cN/Article/details/740514.shtml
WWw.M.nffqi.cN/Article/details/034841.shtml
WWw.M.nffqi.cN/Article/details/530888.shtml
WWw.M.nffqi.cN/Article/details/037664.shtml
WWw.M.nffqi.cN/Article/details/304897.shtml
WWw.M.nffqi.cN/Article/details/003532.shtml
WWw.M.nffqi.cN/Article/details/291126.shtml
WWw.M.nffqi.cN/Article/details/703704.shtml
WWw.M.nffqi.cN/Article/details/893196.shtml
WWw.M.nffqi.cN/Article/details/333619.shtml
WWw.M.nffqi.cN/Article/details/712624.shtml
WWw.M.nffqi.cN/Article/details/558887.shtml
WWw.M.nffqi.cN/Article/details/993615.shtml
WWw.M.nffqi.cN/Article/details/464237.shtml
WWw.M.nffqi.cN/Article/details/973204.shtml
WWw.M.nffqi.cN/Article/details/738562.shtml
WWw.M.nffqi.cN/Article/details/222772.shtml
WWw.M.nffqi.cN/Article/details/081270.shtml
WWw.M.nffqi.cN/Article/details/450371.shtml
WWw.M.nffqi.cN/Article/details/693987.shtml
WWw.M.nffqi.cN/Article/details/570090.shtml
WWw.M.nffqi.cN/Article/details/910043.shtml
WWw.M.nffqi.cN/Article/details/416849.shtml
WWw.M.nffqi.cN/Article/details/179283.shtml
WWw.M.nffqi.cN/Article/details/779511.shtml
WWw.M.nffqi.cN/Article/details/867623.shtml
WWw.M.nffqi.cN/Article/details/861047.shtml
WWw.M.nffqi.cN/Article/details/073760.shtml
WWw.M.nffqi.cN/Article/details/322279.shtml
WWw.M.nffqi.cN/Article/details/021371.shtml
WWw.M.nffqi.cN/Article/details/381681.shtml
WWw.M.nffqi.cN/Article/details/293551.shtml
WWw.M.nffqi.cN/Article/details/436024.shtml
WWw.M.nffqi.cN/Article/details/802886.shtml
WWw.M.nffqi.cN/Article/details/640518.shtml
WWw.M.nffqi.cN/Article/details/563479.shtml
WWw.M.nffqi.cN/Article/details/364609.shtml
WWw.M.nffqi.cN/Article/details/436952.shtml
WWw.M.nffqi.cN/Article/details/433020.shtml
WWw.M.nffqi.cN/Article/details/075271.shtml
WWw.M.nffqi.cN/Article/details/039176.shtml
WWw.M.nffqi.cN/Article/details/458304.shtml
WWw.M.nffqi.cN/Article/details/004400.shtml
WWw.M.nffqi.cN/Article/details/873597.shtml
WWw.M.nffqi.cN/Article/details/332401.shtml
WWw.M.nffqi.cN/Article/details/256005.shtml
WWw.M.nffqi.cN/Article/details/633507.shtml
WWw.M.nffqi.cN/Article/details/484234.shtml
WWw.M.nffqi.cN/Article/details/903360.shtml
WWw.M.nffqi.cN/Article/details/450203.shtml
WWw.M.nffqi.cN/Article/details/916639.shtml
WWw.M.nffqi.cN/Article/details/641850.shtml
WWw.M.nffqi.cN/Article/details/303898.shtml
WWw.M.nffqi.cN/Article/details/894479.shtml
WWw.M.nffqi.cN/Article/details/184523.shtml
WWw.M.nffqi.cN/Article/details/662069.shtml
WWw.M.nffqi.cN/Article/details/632003.shtml
WWw.M.nffqi.cN/Article/details/699185.shtml
WWw.M.nffqi.cN/Article/details/330990.shtml
WWw.M.nffqi.cN/Article/details/176144.shtml
WWw.M.nffqi.cN/Article/details/897106.shtml
WWw.M.nffqi.cN/Article/details/853334.shtml
WWw.M.nffqi.cN/Article/details/329565.shtml
WWw.M.nffqi.cN/Article/details/092396.shtml
WWw.M.nffqi.cN/Article/details/956718.shtml
WWw.M.nffqi.cN/Article/details/424671.shtml
WWw.M.nffqi.cN/Article/details/351311.shtml
WWw.M.nffqi.cN/Article/details/658095.shtml
WWw.M.nffqi.cN/Article/details/899843.shtml
WWw.M.nffqi.cN/Article/details/216099.shtml
WWw.M.nffqi.cN/Article/details/052279.shtml
WWw.M.nffqi.cN/Article/details/213053.shtml
WWw.M.nffqi.cN/Article/details/042686.shtml
WWw.M.nffqi.cN/Article/details/713647.shtml
WWw.M.nffqi.cN/Article/details/021862.shtml
WWw.M.nffqi.cN/Article/details/950243.shtml
WWw.M.nffqi.cN/Article/details/708179.shtml
WWw.M.nffqi.cN/Article/details/664937.shtml
WWw.M.nffqi.cN/Article/details/575126.shtml
WWw.M.nffqi.cN/Article/details/194575.shtml
WWw.M.nffqi.cN/Article/details/717661.shtml
WWw.M.nffqi.cN/Article/details/262819.shtml
WWw.M.nffqi.cN/Article/details/084260.shtml
WWw.M.nffqi.cN/Article/details/699610.shtml
WWw.M.nffqi.cN/Article/details/969200.shtml
WWw.M.nffqi.cN/Article/details/533931.shtml
WWw.M.nffqi.cN/Article/details/016782.shtml
WWw.M.nffqi.cN/Article/details/033769.shtml
WWw.M.nffqi.cN/Article/details/824593.shtml
WWw.M.nffqi.cN/Article/details/437022.shtml
WWw.M.nffqi.cN/Article/details/089687.shtml
WWw.M.nffqi.cN/Article/details/577536.shtml
WWw.M.nffqi.cN/Article/details/147542.shtml
WWw.M.nffqi.cN/Article/details/001790.shtml
WWw.M.nffqi.cN/Article/details/991019.shtml
WWw.M.nffqi.cN/Article/details/906831.shtml
WWw.M.nffqi.cN/Article/details/361533.shtml
WWw.M.nffqi.cN/Article/details/368641.shtml
WWw.M.nffqi.cN/Article/details/637943.shtml
WWw.M.nffqi.cN/Article/details/643369.shtml
WWw.M.nffqi.cN/Article/details/119889.shtml
WWw.M.nffqi.cN/Article/details/001788.shtml
WWw.M.nffqi.cN/Article/details/661574.shtml
WWw.M.nffqi.cN/Article/details/491834.shtml
WWw.M.nffqi.cN/Article/details/650884.shtml
WWw.M.nffqi.cN/Article/details/320622.shtml
WWw.M.nffqi.cN/Article/details/069705.shtml
WWw.M.nffqi.cN/Article/details/127104.shtml
WWw.M.nffqi.cN/Article/details/350967.shtml
WWw.M.nffqi.cN/Article/details/143750.shtml
WWw.M.nffqi.cN/Article/details/803294.shtml
WWw.M.nffqi.cN/Article/details/709145.shtml
WWw.M.nffqi.cN/Article/details/454660.shtml
WWw.M.nffqi.cN/Article/details/569047.shtml
WWw.M.nffqi.cN/Article/details/078018.shtml
WWw.M.nffqi.cN/Article/details/234936.shtml
WWw.M.nffqi.cN/Article/details/453469.shtml
WWw.M.nffqi.cN/Article/details/171249.shtml
WWw.M.nffqi.cN/Article/details/883606.shtml
WWw.M.nffqi.cN/Article/details/191825.shtml
WWw.M.nffqi.cN/Article/details/303884.shtml
WWw.M.nffqi.cN/Article/details/809979.shtml
WWw.M.nffqi.cN/Article/details/987173.shtml
WWw.M.nffqi.cN/Article/details/465972.shtml
WWw.M.nffqi.cN/Article/details/859276.shtml
WWw.M.nffqi.cN/Article/details/960483.shtml
WWw.M.nffqi.cN/Article/details/308023.shtml
WWw.M.nffqi.cN/Article/details/555532.shtml
WWw.M.nffqi.cN/Article/details/793549.shtml
WWw.M.nffqi.cN/Article/details/505441.shtml
WWw.M.nffqi.cN/Article/details/899911.shtml
WWw.M.nffqi.cN/Article/details/509961.shtml
WWw.M.nffqi.cN/Article/details/543890.shtml
WWw.M.nffqi.cN/Article/details/342608.shtml
WWw.M.nffqi.cN/Article/details/696814.shtml
WWw.M.nffqi.cN/Article/details/744025.shtml
WWw.M.nffqi.cN/Article/details/134183.shtml
WWw.M.nffqi.cN/Article/details/871265.shtml
WWw.M.nffqi.cN/Article/details/116248.shtml
WWw.M.nffqi.cN/Article/details/680304.shtml
WWw.M.nffqi.cN/Article/details/694683.shtml
WWw.M.nffqi.cN/Article/details/630111.shtml
WWw.M.nffqi.cN/Article/details/644647.shtml
WWw.M.nffqi.cN/Article/details/915597.shtml
WWw.M.nffqi.cN/Article/details/939582.shtml
WWw.M.nffqi.cN/Article/details/583724.shtml
WWw.M.nffqi.cN/Article/details/848589.shtml
WWw.M.nffqi.cN/Article/details/111908.shtml
WWw.M.nffqi.cN/Article/details/254696.shtml
WWw.M.nffqi.cN/Article/details/406288.shtml
WWw.M.nffqi.cN/Article/details/676505.shtml
WWw.M.nffqi.cN/Article/details/000704.shtml
WWw.M.nffqi.cN/Article/details/148191.shtml
WWw.M.nffqi.cN/Article/details/093762.shtml
WWw.M.nffqi.cN/Article/details/539677.shtml
WWw.M.nffqi.cN/Article/details/382812.shtml
WWw.M.nffqi.cN/Article/details/826759.shtml
WWw.M.nffqi.cN/Article/details/899994.shtml
WWw.M.nffqi.cN/Article/details/113803.shtml
WWw.M.nffqi.cN/Article/details/004045.shtml
WWw.M.nffqi.cN/Article/details/432403.shtml
WWw.M.nffqi.cN/Article/details/385086.shtml
WWw.M.nffqi.cN/Article/details/577939.shtml
WWw.M.nffqi.cN/Article/details/965955.shtml
WWw.M.nffqi.cN/Article/details/400467.shtml
WWw.M.nffqi.cN/Article/details/329649.shtml
WWw.M.nffqi.cN/Article/details/124272.shtml
WWw.M.nffqi.cN/Article/details/588470.shtml
WWw.M.nffqi.cN/Article/details/416867.shtml
WWw.M.nffqi.cN/Article/details/741709.shtml
WWw.M.nffqi.cN/Article/details/380772.shtml
WWw.M.nffqi.cN/Article/details/116078.shtml
WWw.M.nffqi.cN/Article/details/851188.shtml
WWw.M.nffqi.cN/Article/details/890929.shtml
WWw.M.nffqi.cN/Article/details/221354.shtml
WWw.M.nffqi.cN/Article/details/869367.shtml
WWw.M.nffqi.cN/Article/details/768705.shtml
WWw.M.nffqi.cN/Article/details/217739.shtml
WWw.M.nffqi.cN/Article/details/261901.shtml
WWw.M.nffqi.cN/Article/details/489023.shtml
WWw.M.nffqi.cN/Article/details/569264.shtml
WWw.M.nffqi.cN/Article/details/781022.shtml
WWw.M.nffqi.cN/Article/details/786003.shtml
WWw.M.nffqi.cN/Article/details/541656.shtml
WWw.M.nffqi.cN/Article/details/484876.shtml
WWw.M.nffqi.cN/Article/details/148176.shtml
WWw.M.nffqi.cN/Article/details/368754.shtml
WWw.M.nffqi.cN/Article/details/290934.shtml
WWw.M.nffqi.cN/Article/details/758377.shtml
WWw.M.nffqi.cN/Article/details/636378.shtml
WWw.M.nffqi.cN/Article/details/228126.shtml
WWw.M.nffqi.cN/Article/details/029295.shtml
WWw.M.nffqi.cN/Article/details/917042.shtml
WWw.M.nffqi.cN/Article/details/082234.shtml
WWw.M.nffqi.cN/Article/details/670944.shtml
WWw.M.nffqi.cN/Article/details/408356.shtml
WWw.M.nffqi.cN/Article/details/037164.shtml
WWw.M.nffqi.cN/Article/details/870182.shtml
WWw.M.nffqi.cN/Article/details/506091.shtml
WWw.M.nffqi.cN/Article/details/631544.shtml
WWw.M.nffqi.cN/Article/details/030380.shtml
WWw.M.nffqi.cN/Article/details/227294.shtml
WWw.M.nffqi.cN/Article/details/337391.shtml
WWw.M.nffqi.cN/Article/details/466303.shtml
WWw.M.nffqi.cN/Article/details/019576.shtml
WWw.M.nffqi.cN/Article/details/751878.shtml
WWw.M.nffqi.cN/Article/details/185173.shtml
WWw.M.nffqi.cN/Article/details/575216.shtml
WWw.M.nffqi.cN/Article/details/697997.shtml
WWw.M.nffqi.cN/Article/details/845995.shtml
WWw.M.nffqi.cN/Article/details/514171.shtml
WWw.M.nffqi.cN/Article/details/199970.shtml
WWw.M.nffqi.cN/Article/details/214742.shtml
WWw.M.nffqi.cN/Article/details/127301.shtml
WWw.M.nffqi.cN/Article/details/055269.shtml
WWw.M.nffqi.cN/Article/details/566826.shtml
WWw.M.nffqi.cN/Article/details/892809.shtml
WWw.M.nffqi.cN/Article/details/558114.shtml
WWw.M.nffqi.cN/Article/details/627651.shtml
WWw.M.nffqi.cN/Article/details/785901.shtml
WWw.M.nffqi.cN/Article/details/504988.shtml
WWw.M.nffqi.cN/Article/details/556071.shtml
WWw.M.nffqi.cN/Article/details/072834.shtml
WWw.M.nffqi.cN/Article/details/192647.shtml
WWw.M.nffqi.cN/Article/details/076529.shtml
WWw.M.nffqi.cN/Article/details/631082.shtml
WWw.M.nffqi.cN/Article/details/852996.shtml
WWw.M.nffqi.cN/Article/details/363032.shtml
WWw.M.nffqi.cN/Article/details/394533.shtml
WWw.M.nffqi.cN/Article/details/735831.shtml
WWw.M.nffqi.cN/Article/details/805350.shtml
WWw.M.nffqi.cN/Article/details/764132.shtml
WWw.M.nffqi.cN/Article/details/473328.shtml
WWw.M.nffqi.cN/Article/details/317231.shtml
WWw.M.nffqi.cN/Article/details/374085.shtml
WWw.M.nffqi.cN/Article/details/740219.shtml
WWw.M.nffqi.cN/Article/details/858368.shtml
WWw.M.nffqi.cN/Article/details/239887.shtml
WWw.M.nffqi.cN/Article/details/470385.shtml
WWw.M.nffqi.cN/Article/details/206640.shtml
WWw.M.nffqi.cN/Article/details/727352.shtml
WWw.M.nffqi.cN/Article/details/954810.shtml
WWw.M.nffqi.cN/Article/details/156222.shtml
WWw.M.nffqi.cN/Article/details/889403.shtml
WWw.M.nffqi.cN/Article/details/717335.shtml
WWw.M.nffqi.cN/Article/details/887965.shtml
WWw.M.nffqi.cN/Article/details/347193.shtml
WWw.M.nffqi.cN/Article/details/014952.shtml
WWw.M.nffqi.cN/Article/details/309596.shtml
WWw.M.nffqi.cN/Article/details/034937.shtml
WWw.M.nffqi.cN/Article/details/186086.shtml
WWw.M.nffqi.cN/Article/details/984511.shtml
WWw.M.nffqi.cN/Article/details/934002.shtml
WWw.M.nffqi.cN/Article/details/319672.shtml
WWw.M.nffqi.cN/Article/details/919389.shtml
WWw.M.nffqi.cN/Article/details/385257.shtml
WWw.M.nffqi.cN/Article/details/830600.shtml
WWw.M.nffqi.cN/Article/details/342782.shtml
WWw.M.nffqi.cN/Article/details/309574.shtml
WWw.M.nffqi.cN/Article/details/610735.shtml
WWw.M.nffqi.cN/Article/details/772079.shtml
WWw.M.nffqi.cN/Article/details/797422.shtml
WWw.M.nffqi.cN/Article/details/284051.shtml
WWw.M.nffqi.cN/Article/details/216848.shtml
WWw.M.nffqi.cN/Article/details/841090.shtml
WWw.M.nffqi.cN/Article/details/605241.shtml
WWw.M.nffqi.cN/Article/details/691085.shtml
WWw.M.nffqi.cN/Article/details/267729.shtml
WWw.M.nffqi.cN/Article/details/401179.shtml
WWw.M.nffqi.cN/Article/details/343631.shtml
WWw.M.nffqi.cN/Article/details/650301.shtml
WWw.M.nffqi.cN/Article/details/468631.shtml
WWw.M.nffqi.cN/Article/details/084102.shtml
WWw.M.nffqi.cN/Article/details/004956.shtml
WWw.M.nffqi.cN/Article/details/662960.shtml
WWw.M.nffqi.cN/Article/details/825352.shtml
WWw.M.nffqi.cN/Article/details/770448.shtml
WWw.M.nffqi.cN/Article/details/264615.shtml
WWw.M.nffqi.cN/Article/details/942844.shtml
WWw.M.nffqi.cN/Article/details/095407.shtml
WWw.M.nffqi.cN/Article/details/748304.shtml
WWw.M.nffqi.cN/Article/details/766215.shtml
WWw.M.nffqi.cN/Article/details/407182.shtml
WWw.M.nffqi.cN/Article/details/021020.shtml
WWw.M.nffqi.cN/Article/details/965566.shtml
WWw.M.nffqi.cN/Article/details/848453.shtml
WWw.M.nffqi.cN/Article/details/282318.shtml
WWw.M.nffqi.cN/Article/details/991282.shtml
WWw.M.nffqi.cN/Article/details/379135.shtml
WWw.M.nffqi.cN/Article/details/311331.shtml
WWw.M.nffqi.cN/Article/details/346459.shtml
WWw.M.nffqi.cN/Article/details/301891.shtml
WWw.M.nffqi.cN/Article/details/140413.shtml
WWw.M.nffqi.cN/Article/details/210680.shtml
WWw.M.nffqi.cN/Article/details/737453.shtml
WWw.M.nffqi.cN/Article/details/110648.shtml
WWw.M.nffqi.cN/Article/details/481586.shtml
WWw.M.nffqi.cN/Article/details/357763.shtml
WWw.M.nffqi.cN/Article/details/219585.shtml
WWw.M.nffqi.cN/Article/details/278044.shtml
WWw.M.nffqi.cN/Article/details/930024.shtml
WWw.M.nffqi.cN/Article/details/074597.shtml
WWw.M.nffqi.cN/Article/details/413842.shtml
WWw.M.nffqi.cN/Article/details/516137.shtml
WWw.M.nffqi.cN/Article/details/400957.shtml
WWw.M.nffqi.cN/Article/details/835304.shtml
WWw.M.nffqi.cN/Article/details/278214.shtml
WWw.M.nffqi.cN/Article/details/516459.shtml
WWw.M.nffqi.cN/Article/details/974848.shtml
WWw.M.nffqi.cN/Article/details/758400.shtml
WWw.M.nffqi.cN/Article/details/670985.shtml
WWw.M.nffqi.cN/Article/details/796937.shtml
WWw.M.nffqi.cN/Article/details/810411.shtml
WWw.M.nffqi.cN/Article/details/078233.shtml
WWw.M.nffqi.cN/Article/details/984930.shtml
WWw.M.nffqi.cN/Article/details/068125.shtml
WWw.M.nffqi.cN/Article/details/911018.shtml
WWw.M.nffqi.cN/Article/details/132901.shtml
WWw.M.nffqi.cN/Article/details/641033.shtml
WWw.M.nffqi.cN/Article/details/606036.shtml
WWw.M.nffqi.cN/Article/details/013112.shtml
WWw.M.nffqi.cN/Article/details/172100.shtml
WWw.M.nffqi.cN/Article/details/187135.shtml
WWw.M.nffqi.cN/Article/details/644057.shtml
WWw.M.nffqi.cN/Article/details/197292.shtml
WWw.M.nffqi.cN/Article/details/995494.shtml
WWw.M.nffqi.cN/Article/details/782093.shtml
WWw.M.nffqi.cN/Article/details/981954.shtml
WWw.M.nffqi.cN/Article/details/315342.shtml
WWw.M.nffqi.cN/Article/details/696285.shtml
WWw.M.nffqi.cN/Article/details/812113.shtml
WWw.M.nffqi.cN/Article/details/694965.shtml


