Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleHub
提交
11a25c91
P
PaddleHub
项目概览
PaddlePaddle
/
PaddleHub
大约 1 年 前同步成功
通知
282
Star
12117
Fork
2091
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
200
列表
看板
标记
里程碑
合并请求
4
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleHub
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
200
Issue
200
列表
看板
标记
里程碑
合并请求
4
合并请求
4
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
11a25c91
编写于
1月 07, 2020
作者:
走神的阿圆
提交者:
Steffy-zxf
1月 07, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update serving doc (#310)
* Modify title N to step N. * update serving doc * update serving doc
上级
fa4b7b08
变更
11
显示空白变更内容
内联
并排
Showing
11 changed file
with
42 addition
and
127 deletion
+42
-127
demo/serving/README.md
demo/serving/README.md
+4
-4
demo/serving/bert_service/README.md
demo/serving/bert_service/README.md
+1
-2
demo/serving/module_serving/README.md
demo/serving/module_serving/README.md
+18
-104
demo/serving/module_serving/lexical_analysis_lac/README.md
demo/serving/module_serving/lexical_analysis_lac/README.md
+1
-1
demo/serving/module_serving/lexical_analysis_lac/lac_serving_demo.py
...g/module_serving/lexical_analysis_lac/lac_serving_demo.py
+1
-1
demo/serving/module_serving/lexical_analysis_lac/lac_with_dict_serving_demo.py
...erving/lexical_analysis_lac/lac_with_dict_serving_demo.py
+1
-1
demo/serving/module_serving/semantic_model_simnet_bow/simnet_bow_serving_demo.py
...ving/semantic_model_simnet_bow/simnet_bow_serving_demo.py
+1
-1
demo/serving/module_serving/sentiment_analysis_senta_lstm/senta_lstm_serving_demo.py
.../sentiment_analysis_senta_lstm/senta_lstm_serving_demo.py
+1
-1
demo/serving/module_serving/text_censorship_porn_detection_lstm/porn_detection_lstm_serving_demo.py
...p_porn_detection_lstm/porn_detection_lstm_serving_demo.py
+1
-1
tutorial/bert_service.md
tutorial/bert_service.md
+5
-5
tutorial/serving.md
tutorial/serving.md
+8
-6
未找到文件。
demo/serving/README.md
浏览文件 @
11a25c91
...
...
@@ -8,11 +8,11 @@ PaddleHub Serving是基于PaddleHub的一键模型服务部署工具,能够通
PaddleHub Serving主要包括利用Bert Service实现embedding服务化,以及利用预测模型实现预训练模型预测服务化两大功能,未来还将支持开发者使用PaddleHub Fine-tune API的模型服务化。
## Bert Service
Bert Service
是基于
[
Paddle Serving
](
https://github.com/PaddlePaddle/Serving
)
框架的快速部署模型远程计算服务方案,可将embedding过程通过调用API接口的方式实现,减少了对机器资源的依赖。使用PaddleHub可在服务器上一键部署
`Bert Service`
服务,在另外的普通机器上通过客户端接口即可轻松的获取文本对应的embedding数据。
`Bert Service`
是基于
[
Paddle Serving
](
https://github.com/PaddlePaddle/Serving
)
框架的快速部署模型远程计算服务方案,可将embedding过程通过调用API接口的方式实现,减少了对机器资源的依赖。使用PaddleHub可在服务器上一键部署
`Bert Service`
服务,在另外的普通机器上通过客户端接口即可轻松的获取文本对应的embedding数据。
关于
Bert Service的
具体信息和demo请参见
[
Bert Service
](
../../tutorial/bert_service.md
)
关于
其
具体信息和demo请参见
[
Bert Service
](
../../tutorial/bert_service.md
)
该示例展示了利用
Bert Service
进行远程embedding服务化部署和在线预测,并获取文本embedding结果。
该示例展示了利用
`Bert Service`
进行远程embedding服务化部署和在线预测,并获取文本embedding结果。
## 预训练模型一键服务部署
预训练模型一键服务部署是基于PaddleHub的预训练模型快速部署的服务化方案,能够将模型预测以API接口的方式实现。
...
...
@@ -53,4 +53,4 @@ Bert Service是基于[Paddle Serving](https://github.com/PaddlePaddle/Serving)
  
该示例展示了利用senta_lstm完成中文文本情感分析服务化部署和在线预测,获取文本的情感分析结果。
关于Paddle Serving预训练模型一键服务部署功能的具体信息请参见
[
serving
](
module_serving
)
关于Paddle Serving预训练模型一键服务部署功能的具体信息请参见
[
Module Serving
](
module_serving
)
。
demo/serving/bert_service/README.md
浏览文件 @
11a25c91
...
...
@@ -68,5 +68,4 @@ Paddle Inference Server exit successfully!
这样,我们就利用一台GPU机器就完成了
`Bert Service`
的部署,并利用另一台普通机器进行了测试,可见通过
`Bert Service`
能够方便地进行在线embedding服务的快速部署。
## 预训练模型一键服务部署
除了
`Bert Service`
外,PaddleHub
Serving还具有预训练模型一键服务部署功能,能够将预训练模型快捷部署上线,对外提供可靠的在线预测服务,具体信息请参见
[
Module Serving
](
../../../tutorial/serving.md
)
。
除了
`Bert Service`
外,PaddleHub Serving还具有预训练模型一键服务部署功能,能够将预训练模型快捷部署上线,对外提供可靠的在线预测服务,具体信息请参见
[
Module Serving
](
../../../tutorial/serving.md
)
。
demo/serving/module_serving/README.md
浏览文件 @
11a25c91
# PaddleHub Serving模型一键服务部署
## 简介
### 为什么使用一键服务部署
使用PaddleHub能够快速进行
迁移学习和模型预测,但开发者常面临将训练好的模型部署上线的需求,无论是对外开放服务端口,还是在局域网中搭建预测服务,都需要PaddleHub具有快速部署模型预测服务的能力。在这个背景下,模型一键服务部署工具——PaddleHub Serving应运而生。开发者通过一句命令快速得到一个预测服务API
,而无需关注网络框架选择和实现。
使用PaddleHub能够快速进行
模型预测,但开发者常面临本地预测过程迁移线上的需求。无论是对外开放服务端口,还是在局域网中搭建预测服务,都需要PaddleHub具有快速部署模型预测服务的能力。在这个背景下,模型一键服务部署工具——PaddleHub Serving应运而生。开发者通过一行命令即可快速启动一个模型预测在线服务
,而无需关注网络框架选择和实现。
### 什么是一键服务部署
PaddleHub Serving是基于PaddleHub的一键模型服务部署工具,能够通过简单的Hub命令行工具轻松启动一个模型预测在线服务,前端通过Flask和Gunicorn完成网络请求的处理,后端直接调用PaddleHub预测接口,同时支持使用多进程方式利用多核提高并发能力,保证预测服务的性能。
### 支持模型
目前PaddleHub Serving支持PaddleHub所有可直接用于预测的模型进行服务部署,包括
`lac`
、
`senta_bilstm`
等nlp类模型,以及
`yolov3_coco2017`
、
`vgg16_imagenet`
等cv类模型,未来还将支持开发者使用PaddleHub Fine-tune API得到的模型用于快捷服务部署。
**NOTE:**
关于PaddleHub Serving一键服务部署的具体信息请参见
[
PaddleHub Servung
](
../../../tutorial/serving.md
)
。
## Demo——部署一个在线lac分词服务
### Step1:部署lac在线服务
现在,我们要部署一个lac在线服务,以通过接口获取文本的分词结果。
首先,根据2.1节所述,启动PaddleHub Serving服务端的两种方式分别为:
```
shell
$
hub serving start
-m
lac
```
或
```
shell
$
hub serving start
-c
serving_config.json
```
其中
`serving_config.json`
的内容如下:
```
json
{
"modules_info"
:
[
{
"module"
:
"lac"
,
"version"
:
"1.0.0"
,
"batch_size"
:
1
}
],
"use_gpu"
:
false
,
"port"
:
8866
,
"use_multiprocess"
:
false
}
```
启动成功界面如图:
<p
align=
"center"
>
<img
src=
"../demo/serving/module_serving/img/start_serving_lac.png"
width=
"100%"
/>
</p>
这样我们就在8866端口部署了lac的在线分词服务。
*此处warning为Flask提示,不影响使用*
### Step2:访问lac预测接口
在服务部署好之后,我们可以进行测试,用来测试的文本为
`今天是个好日子`
和
`天气预报说今天要下雨`
。
客户端代码如下:
```
python
# coding: utf8
import
requests
import
json
if
__name__
==
"__main__"
:
# 指定用于用于预测的文本并生成字典{"text": [text_1, text_2, ... ]}
text_list
=
[
"今天是个好日子"
,
"天气预报说今天要下雨"
]
text
=
{
"text"
:
text_list
}
# 指定预测方法为lac并发送post请求
url
=
"http://127.0.0.1:8866/predict/text/lac"
r
=
requests
.
post
(
url
=
url
,
data
=
text
)
# 打印预测结果
print
(
json
.
dumps
(
r
.
json
(),
indent
=
4
,
ensure_ascii
=
False
))
```
运行后得到结果:
```
python
{
"results"
:
[
{
"tag"
:
[
"TIME"
,
"v"
,
"q"
,
"n"
],
"word"
:
[
"今天"
,
"是"
,
"个"
,
"好日子"
]
},
{
"tag"
:
[
"n"
,
"v"
,
"TIME"
,
"v"
,
"v"
],
"word"
:
[
"天气预报"
,
"说"
,
"今天"
,
"要"
,
"下雨"
]
}
]
}
```
## Demo——其他模型的一键部署服务
获取其他PaddleHub Serving的一键服务部署场景示例,可参见下列demo:
*
[
图像分类-基于vgg11_imagent
](
../demo/serving/module_serving/classification_vgg11_imagenet
)
目前PaddleHub Serving支持PaddleHub所有可直接用于预测的模型进行服务部署,包括
`lac`
、
`senta_bilstm`
等NLP类模型,以及
`yolov3_darknett53_coco2017`
、
`vgg16_imagenet`
等CV类模型,未来还将支持开发者使用PaddleHub Fine-tune API得到的模型用于快捷服务部署。
**NOTE:**
关于PaddleHub Serving一键服务部署的具体信息请参见
[
PaddleHub Serving
](
../../../tutorial/serving.md
)
。
## Demo
获取PaddleHub Serving的一键服务部署场景示例,可参见下列demo:
*
[
图像分类-基于vgg11_imagent
](
../module_serving/classification_vgg11_imagenet
)
  
该示例展示了利用vgg11_imagent完成图像分类服务化部署和在线预测,获取图像分类结果。
*
[
图像生成-基于stgan_celeba
](
../
demo/serving/
module_serving/GAN_stgan_celeba
)
*
[
图像生成-基于stgan_celeba
](
../module_serving/GAN_stgan_celeba
)
  
该示例展示了利用stgan_celeba生成图像服务化部署和在线预测,获取指定风格的生成图像。
*
[
文本审核-基于porn_detection_lstm
](
../
demo/serving/
module_serving/text_censorship_porn_detection_lstm
)
*
[
文本审核-基于porn_detection_lstm
](
../module_serving/text_censorship_porn_detection_lstm
)
  
该示例展示了利用porn_detection_lstm完成中文文本黄色敏感信息鉴定的服务化部署和在线预测,获取文本是否敏感及其置信度。
*
[
中文词法分析-基于lac
](
../
demo/serving/
module_serving/lexical_analysis_lac
)
*
[
中文词法分析-基于lac
](
../module_serving/lexical_analysis_lac
)
  
该示例展示了利用lac完成中文文本分词服务化部署和在线预测,获取文本的分词结果,并可通过用户自定义词典干预分词结果。
*
[
目标检测-基于yolov3_darknet53_coco2017
](
..
./demo/serving/
serving/object_detection_yolov3_darknet53_coco2017
)
*
[
目标检测-基于yolov3_darknet53_coco2017
](
..
/module_
serving/object_detection_yolov3_darknet53_coco2017
)
  
该示例展示了利用yolov3_darknet53_coco2017完成目标检测服务化部署和在线预测,获取检测结果和覆盖识别框的图片。
*
[
中文语义分析-基于simnet_bow
](
../
demo/serving/
module_serving/semantic_model_simnet_bow
)
*
[
中文语义分析-基于simnet_bow
](
../module_serving/semantic_model_simnet_bow
)
  
该示例展示了利用simnet_bow完成中文文本相似度检测服务化部署和在线预测,获取文本的相似程度。
*
[
图像分割-基于deeplabv3p_xception65_humanseg
](
../
demo/serving/
module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg
)
*
[
图像分割-基于deeplabv3p_xception65_humanseg
](
../module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg
)
  
该示例展示了利用deeplabv3p_xception65_humanseg完成图像分割服务化部署和在线预测,获取识别结果和分割后的图像。
*
[
中文情感分析-基于simnet_bow
](
../
demo/serving/
module_serving/semantic_model_simnet_bow
)
*
[
中文情感分析-基于simnet_bow
](
../module_serving/semantic_model_simnet_bow
)
  
该示例展示了利用senta_lstm完成中文文本情感分析服务化部署和在线预测,获取文本的情感分析结果。
## Bert Service
除了预训练模型一键服务部署功能
外
外,PaddleHub Serving还具有
`Bert Service`
功能,支持ernie_tiny、bert等模型快速部署,对外提供可靠的在线embedding服务,具体信息请参见
[
Bert Service
](
../../../tutorial/bert_service.md
)
。
除了预训练模型一键服务部署功能
之
外,PaddleHub Serving还具有
`Bert Service`
功能,支持ernie_tiny、bert等模型快速部署,对外提供可靠的在线embedding服务,具体信息请参见
[
Bert Service
](
../../../tutorial/bert_service.md
)
。
demo/serving/module_serving/lexical_analysis_lac/README.md
浏览文件 @
11a25c91
...
...
@@ -6,7 +6,7 @@
这里就带领大家使用PaddleHub Serving,通过简单几步部署一个词法分析在线服务。
##
2
启动PaddleHub Serving
##
Step1:
启动PaddleHub Serving
启动命令如下
```
shell
$
hub serving start
-m
lac
...
...
demo/serving/module_serving/lexical_analysis_lac/lac_serving_demo.py
浏览文件 @
11a25c91
...
...
@@ -3,7 +3,7 @@ import requests
import
json
if
__name__
==
"__main__"
:
# 指定用于
用于
预测的文本并生成字典{"text": [text_1, text_2, ... ]}
# 指定用于预测的文本并生成字典{"text": [text_1, text_2, ... ]}
text_list
=
[
"今天是个好日子"
,
"天气预报说今天要下雨"
]
text
=
{
"text"
:
text_list
}
# 指定预测方法为lac并发送post请求
...
...
demo/serving/module_serving/lexical_analysis_lac/lac_with_dict_serving_demo.py
浏览文件 @
11a25c91
...
...
@@ -3,7 +3,7 @@ import requests
import
json
if
__name__
==
"__main__"
:
# 指定用于
用于
预测的文本并生成字典{"text": [text_1, text_2, ... ]}
# 指定用于预测的文本并生成字典{"text": [text_1, text_2, ... ]}
text_list
=
[
"今天是个好日子"
,
"天气预报说今天要下雨"
]
text
=
{
"text"
:
text_list
}
# 指定自定义词典{"user_dict": dict.txt}
...
...
demo/serving/module_serving/semantic_model_simnet_bow/simnet_bow_serving_demo.py
浏览文件 @
11a25c91
...
...
@@ -3,7 +3,7 @@ import requests
import
json
if
__name__
==
"__main__"
:
# 指定用于
用于
匹配的文本并生成字典{"text_1": [text_a1, text_a2, ... ]
# 指定用于匹配的文本并生成字典{"text_1": [text_a1, text_a2, ... ]
# "text_2": [text_b1, text_b2, ... ]}
text
=
{
"text_1"
:
[
"这道题太难了"
,
"这道题太难了"
,
"这道题太难了"
],
...
...
demo/serving/module_serving/sentiment_analysis_senta_lstm/senta_lstm_serving_demo.py
浏览文件 @
11a25c91
...
...
@@ -3,7 +3,7 @@ import requests
import
json
if
__name__
==
"__main__"
:
# 指定用于
用于
预测的文本并生成字典{"text": [text_1, text_2, ... ]}
# 指定用于预测的文本并生成字典{"text": [text_1, text_2, ... ]}
text_list
=
[
"我不爱吃甜食"
,
"我喜欢躺在床上看电影"
]
text
=
{
"text"
:
text_list
}
# 指定预测方法为senta_lstm并发送post请求
...
...
demo/serving/module_serving/text_censorship_porn_detection_lstm/porn_detection_lstm_serving_demo.py
浏览文件 @
11a25c91
...
...
@@ -3,7 +3,7 @@ import requests
import
json
if
__name__
==
"__main__"
:
# 指定用于
用于
预测的文本并生成字典{"text": [text_1, text_2, ... ]}
# 指定用于预测的文本并生成字典{"text": [text_1, text_2, ... ]}
text_list
=
[
"黄片下载"
,
"中国黄页"
]
text
=
{
"text"
:
text_list
}
# 指定预测方法为lac并发送post请求
...
...
tutorial/bert_service.md
浏览文件 @
11a25c91
...
...
@@ -30,7 +30,7 @@
使用Bert Service搭建服务主要分为下面三个步骤:
## Step1:
环境准备
## Step1:
准备环境
### 环境要求
下表是使用
`Bert Service`
的环境要求,带有
*
号标志项为非必需依赖,可根据实际使用需求选择安装。
...
...
@@ -41,7 +41,7 @@
|PaddlePaddle|>=1.6.1|若使用GPU计算,则对应使用PaddlePaddle-gpu版本|
|GCC|>=4.8|无|
|CUDA
*
|>=8|若使用GPU,需使用CUDA8以上版本|
|paddle-gpu-serving
*
|>=0.8.
0
|在
`Bert Service`
服务端需依赖此包|
|paddle-gpu-serving
*
|>=0.8.
2
|在
`Bert Service`
服务端需依赖此包|
|ujson
*
|>=1.35|在
`Bert Service`
客户端需依赖此包|
### 安装步骤
...
...
@@ -84,7 +84,7 @@ $ pip install ujson
|
[
bert_chinese_L-12_H-768_A-12
](
https://paddlepaddle.org.cn/hubdetail?name=bert_chinese_L-12_H-768_A-12&en_category=SemanticModel
)
|BERT|
## Step2:服务端(server)
## Step2:
启动
服务端(server)
### 简介
server端接收client端发送的数据,执行模型计算过程并将计算结果返回给client端。
...
...
@@ -130,7 +130,7 @@ Paddle Inference Server exit successfully!
```
## Step3:客户端(client)
## Step3:
启动
客户端(client)
### 简介
client端接收文本数据,并获取server端返回的模型计算的embedding结果。
...
...
@@ -197,7 +197,7 @@ input_text = [["西风吹老洞庭波"], ["一夜湘君白发多"], ["醉后不
```
python
result
=
bc
.
get_result
(
input_text
=
input_text
)
```
最后即可得到
embedding结果(此处只展示部分结果)。
这样,就得到了
embedding结果(此处只展示部分结果)。
```
python
[[
0.9993321895599361
,
0.9994612336158751
,
0.9999646544456481
,
0.732795298099517
,
-
0.34387934207916204
,
...
]]
```
...
...
tutorial/serving.md
浏览文件 @
11a25c91
# PaddleHub Serving模型一键服务部署
## 简介
### 为什么使用一键服务部署
使用PaddleHub能够快速进行
迁移学习和模型预测,但开发者常面临将训练好的模型部署上线的需求,无论是对外开放服务端口,还是在局域网中搭建预测服务,都需要PaddleHub具有快速部署模型预测服务的能力。在这个背景下,模型一键服务部署工具——PaddleHub Serving应运而生。开发者通过一句命令快速得到一个预测服务API
,而无需关注网络框架选择和实现。
使用PaddleHub能够快速进行
模型预测,但开发者常面临本地预测过程迁移线上的需求。无论是对外开放服务端口,还是在局域网中搭建预测服务,都需要PaddleHub具有快速部署模型预测服务的能力。在这个背景下,模型一键服务部署工具——PaddleHub Serving应运而生。开发者通过一行命令即可快速启动一个模型预测在线服务
,而无需关注网络框架选择和实现。
### 什么是一键服务部署
PaddleHub Serving是基于PaddleHub的一键模型服务部署工具,能够通过简单的Hub命令行工具轻松启动一个模型预测在线服务,前端通过Flask和Gunicorn完成网络请求的处理,后端直接调用PaddleHub预测接口,同时支持使用多进程方式利用多核提高并发能力,保证预测服务的性能。
### 支持模型
目前PaddleHub Serving支持
PaddleHub所有可直接用于预测的模型进行服务部署,包括
`lac`
、
`senta_bilstm`
等nlp类模型,以及
`yolov3_coco2017`
、
`vgg16_imagenet`
等cv类模型,
未来还将支持开发者使用PaddleHub Fine-tune API得到的模型用于快捷服务部署。
目前PaddleHub Serving支持
对PaddleHub所有可直接预测的模型进行服务部署,包括
`lac`
、
`senta_bilstm`
等NLP类模型,以及
`yolov3_darknet53_coco2017`
、
`vgg16_imagenet`
等CV类模型,更多模型请参见
[
PaddleHub支持模型列表
](
https://paddlepaddle.org.cn/hublist
)
。
未来还将支持开发者使用PaddleHub Fine-tune API得到的模型用于快捷服务部署。
### 所需环境
下表是使用PaddleHub Serving的环境要求及注意事项。
...
...
@@ -19,7 +19,7 @@ PaddleHub Serving是基于PaddleHub的一键模型服务部署工具,能够通
## 使用
### Step1:启动服务端部署
PaddleHub Serving有两种启动方式,分别是使用命令行
命令
启动,以及使用配置文件启动。
PaddleHub Serving有两种启动方式,分别是使用命令行启动,以及使用配置文件启动。
#### 命令行命令启动
启动命令
...
...
@@ -99,7 +99,7 @@ http://0.0.0.0:8866/predict/<CATEGORY\>/\<MODULE>
### Step1:部署lac在线服务
现在,我们要部署一个lac在线服务,以通过接口获取文本的分词结果。
首先,
根据2.1节所述,启动PaddleHub Serving服务端的
两种方式分别为:
首先,
任意选择一种启动方式,
两种方式分别为:
```
shell
$
hub serving start
-m
lac
```
...
...
@@ -148,7 +148,7 @@ if __name__ == "__main__":
text_list
=
[
"今天是个好日子"
,
"天气预报说今天要下雨"
]
text
=
{
"text"
:
text_list
}
# 指定预测方法为lac并发送post请求
url
=
"http://
127.0.0.1
:8866/predict/text/lac"
url
=
"http://
0.0.0.0
:8866/predict/text/lac"
r
=
requests
.
post
(
url
=
url
,
data
=
text
)
# 打印预测结果
...
...
@@ -180,6 +180,8 @@ if __name__ == "__main__":
}
```
此Demo的具体信息和代码请参见
[
LAC Serving
](
../demo/serving/module_serving/lexical_analysis_lac
)
。另外,下面展示了一些其他的一键服务部署Demo。
## Demo——其他模型的一键部署服务
获取其他PaddleHub Serving的一键服务部署场景示例,可参见下列demo
...
...
@@ -217,4 +219,4 @@ if __name__ == "__main__":
  
该示例展示了利用senta_lstm完成中文文本情感分析服务化部署和在线预测,获取文本的情感分析结果。
## Bert Service
除了预训练模型一键服务部署功能
外
外,PaddleHub Serving还具有
`Bert Service`
功能,支持ernie_tiny、bert等模型快速部署,对外提供可靠的在线embedding服务,具体信息请参见
[
Bert Service
](
./bert_service.md
)
。
除了预训练模型一键服务部署功能
之
外,PaddleHub Serving还具有
`Bert Service`
功能,支持ernie_tiny、bert等模型快速部署,对外提供可靠的在线embedding服务,具体信息请参见
[
Bert Service
](
./bert_service.md
)
。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录