提交 c2d6ee03 编写于 作者: D dongdaxiang 提交者: MRXLT

fix conflict

上级 30ce48d0
...@@ -19,37 +19,10 @@ wget https://paddle-serving.bj.bcebos.com/data%2Ftext_classification%2Fimdb_serv ...@@ -19,37 +19,10 @@ wget https://paddle-serving.bj.bcebos.com/data%2Ftext_classification%2Fimdb_serv
tar -xzf imdb_serving_example.tar.gz tar -xzf imdb_serving_example.tar.gz
``` ```
### Server Side Code
```python
# test_server_go.py
import os
import sys
from paddle_serving_server import OpMaker
from paddle_serving_server import OpSeqMaker
from paddle_serving_server import Server
op_maker = OpMaker()
read_op = op_maker.create('general_text_reader')
general_infer_op = op_maker.create('general_infer')
general_response_op = op_maker.create('general_text_response')
op_seq_maker = OpSeqMaker()
op_seq_maker.add_op(read_op)
op_seq_maker.add_op(general_infer_op)
op_seq_maker.add_op(general_response_op)
server = Server()
server.set_op_sequence(op_seq_maker.get_op_sequence())
server.load_model_config(sys.argv[1])
server.prepare_server(workdir="work_dir1", port=9292, device="cpu")
server.run_server()
```
### Start Server ### Start Server
``` shell ``` shell
python test_server_go.py ./serving_server_model/ 9292 python -m paddle_serving_server.serve --model ./serving_server_model/ --port 9292
``` ```
### Client code example ### Client code example
......
# 如何在Paddle Serving使用Go Client
(简体中文|[English](./IMDB_GO_CLIENT.md))
本文档说明了如何将Go用作客户端语言。对于Paddle Serving中的Go客户端,提供了一个简单的客户端程序包https://github.com/PaddlePaddle/Serving/tree/develop/go/serving_client, 用户可以根据需要引用该程序包。这是一个基于IMDB数据集的情感分析任务的简单示例。
### 安装
我们假设您已经安装了Go 1.9.2或更高版本,并且安装了python 2.7版本
```shell
go get github.com/PaddlePaddle/Serving/go/serving_client
go get github.com/PaddlePaddle/Serving/go/proto
pip install paddle-serving-server
```
### 下载文本分类模型
```shell
wget https://paddle-serving.bj.bcebos.com/data/text_classification/imdb_serving_example.tar.gz
tar -xzf imdb_serving_example.tar.gz
```
### 启动服务器
```shell
python -m paddle_serving_server.serve --model ./serving_server_model/ --port 9292
```
### 客户端代码示例
```go
// imdb_client.go
package main
import (
       "io"
       "fmt"
       "strings"
       "bufio"
       "strconv"
       "os"
       serving_client "github.com/PaddlePaddle/Serving/go/serving_client"
)
func main () {
     var config_file_path string
     config_file_path = os.Args [1]
     handle: = serving_client.LoadModelConfig (config_file_path)
     handle = serving_client.Connect ("127.0.0.1", "9292", handle)
     test_file_path: = os.Args [2]
     fi, err: = os.Open (test_file_path)
     if err! = nil {
     fmt.Print (err)
     }
     defer fi.Close ()
     br: = bufio.NewReader (fi)
     fetch: = [] string {"cost", "acc", "prediction"}
     var result map [string] [] float32
     for {
     line, err: = br.ReadString ('\ n')
if err == io.EOF {
break
}
line = strings.Trim (line, "\ n")
var words = [] int64 {}
s: = strings.Split (line, "")
value, err: = strconv.Atoi (s [0])
var feed_int_map map [string] [] int64
       
for _, v: = range s [1: value + 1] {
int_v, _: = strconv.Atoi (v)
words = append (words, int64 (int_v))
}
label, err: = strconv.Atoi (s [len (s) -1])
if err! = nil {
panic (err)
}
feed_int_map = map [string] [] int64 {}
feed_int_map ["words"] = words
feed_int_map ["label"] = [] int64 {int64 (label)}
Ranch
result = serving_client.Predict (handle, feed_int_map, fetch)
fmt.Println (result ["prediction"] [1], "\ t", int64 (label))
    }
}
```
### 基于IMDB测试集的预测
```python
go run imdb_client.go serving_client_conf / serving_client_conf.stream.prototxt test.data> result
```
### 计算精度
```python
// acc.go
package main
import (
       "io"
       "os"
       "fmt"
       "bufio"
       "strings"
       "strconv"
)
func main () {
     score_file: = os.Args [1]
     fi, err: = os.Open (score_file)
     if err! = nil {
     fmt.Print (err)
     }
     defer fi.Close ()
     br: = bufio.NewReader (fi)
    
     total: = int (0)
     acc: = int (0)
     for {
     line, err: = br.ReadString ('\ n')
     if err == io.EOF {
        break
     }
    
     line = strings.Trim (line, "\ n")
     s: = strings.Split (line, "\ t")
     prob_str: = strings.Trim (s [0], "")
     label_str: = strings.Trim (s [1], "")
     prob, err: = strconv.ParseFloat (prob_str, 32)
     if err! = nil {
        panic (err)
     }
     label, err: = strconv.ParseFloat (label_str, 32)
     if err! = nil {
        panic (err)
     }
     if (prob-0.5) * (label-0.5)> 0 {
        acc ++
     }
     total ++
    }
    fmt.Println ("total num:", total)
    fmt.Println ("acc num:", acc)
    fmt.Println ("acc:", float32 (acc) / float32 (total))
}
```
```shell
go run acc.go result
total num: 25000
acc num: 22014
acc: 0.88056
```
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = source
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
:github_url: https://github.com/PaddlePaddle/Serving
.. mdinclude:: md/logo.md
Paddle Serving
==============
.. toctree::
:maxdepth: 1
:caption: Readme
:hidden:
.. _instruction: instruction.html
此差异已折叠。
sphinx==2.1.0
mistune
sphinx_rtd_theme
paddlepaddle>=1.6
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册