3-Tensorflow-demo_12_02-server_demo

本文介绍如何使用TensorFlow进行分布式训练,包括通过tf.app.flags设置命令行参数,定义集群节点和服务器,以及如何运行主函数启动服务器等待客户端连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -- encoding:utf-8 --

import tensorflow as tf

# 0. 用于命令行传参数(标准接口)
"""
第一个:参数名字;第二个:默认值;第三个:参数描述
DEFINE_float
DEFINE_bolean
"""
tf.app.flags.DEFINE_string('job_name', default_value='work',
                           docstring='必须给定一个任务名称,可选值: ps or work')
tf.app.flags.DEFINE_integer('task_index', default_value=0,
                            docstring='必须给定一个启动的id')
FLAGS = tf.app.flags.FLAGS

# 1. 定义服务器(节点)都在哪些机器上,并且使用什么端口号提供服务
# ps:表示用于变量的存储节点
# work:表示用于工作计算的节点
ps_hosts = ['127.0.0.1:33331', '127.0.0.1:33332']
work_hosts = ['127.0.0.1:33333', '127.0.0.1:33334', '127.0.0.1:33335']
# 创建集群
cluster = tf.train.ClusterSpec({'ps': ps_hosts, 'work': work_hosts})


def main(_):
    # 构建server服务器
    """
        使用给定的定义创建server服务器
    tf.train.Server(object):
        def __init__(self,
               server_or_cluster_def,  # 集群对象
               job_name=None,          # 服务器所属作业名称
               task_index=None,        # 指定服务器任务工作索引
               protocol=None,
               config=None,
               start=True):
    """
    server = tf.train.Server(cluster, job_name=FLAGS.job_name, task_index=FLAGS.task_index)
    # 启动线程等待client的链接
    server.join()


# 使用这种方式保证了,如果此文件被其他文件 import的时候,不会执行main 函数
if __name__ == '__main__':
    tf.app.run()  # 解析命令行参数,调用main函数

服务端部署与启动 现在可以安装服务端了,使用的是 bert-base, 来自于项目BERT-BiLSTM-CRF-NER, 服务端只是该项目中的一个部分。 项目地址:https://github.com/macanv/BERT-BiLSTM-CRF-NER ,感谢Macanv同学提供这么好的项目。 这里要说明一下,我们经常会看到bert-as-service 这个项目的介绍,它只能加载BERT的预训练模型,输出文本向量化的结果。 而如果要加载fine-turing后的模型,就要用到 bert-base 了,详请请见: 基于BERT预训练的中文命名实体识别TensorFlow实现 下载代码并安装 : pip install bert-base==0.0.7 -i https://pypi.python.org/simple 1 或者 git clone https://github.com/macanv/BERT-BiLSTM-CRF-NER cd BERT-BiLSTM-CRF-NER/ python3 setup.py install 1 2 3 使用 bert-base 有三种运行模式,分别支持三种模型,使用参数-mode 来指定: NER 序列标注类型,比如命名实体识别; CLASS 分类模型,就是本文中使用的模型 BERT 这个就是跟bert-as-service 一样的模式了 之所以要分成不同的运行模式,是因为不同模型对输入内容的预处理是不同的,命名实体识别NER是要进行序列标注; 而分类模型只要返回label就可以了。 安装完后运行服务,同时指定监听 HTTP 8091端口,并使用GPU 1来跑; cd /mnt/sda1/transdat/bert-demo/bert/bert_svr export BERT_BASE_DIR=/mnt/sda1/transdat/bert-demo/bert/chinese_L-12_H-768_A-12 export TRAINED_CLASSIFIER=/mnt/sda1/transdat/bert-demo/bert/output export EXP_NAME=mobile_0 bert-base-serving-start \ -model_dir $TRAINED_CLASSIFIER/$EXP_NAME \ -bert_model_dir $BERT_BASE_DIR \ -model_pb_dir $TRAINED_CLASSIFIER/$EXP_NAME \ -mode CLASS \ -max_seq_len 128 \ -http_port 8091 \ -port 5575 \ -port_out 5576 \ -device_map 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 注意:port 和 port_out 这两个参数是API调用的端口号, 默认是5555和5556,如果你准备部署多个模型服务实例,那一定要指定自己的端口号,避免冲突。 我这里是改为: 5575 和 5576 如果报错没运行起来,可能是有些模块没装上,都是 bert_base/server/http.py里引用的,装上就好了: sudo pip install flask sudo pip install flask_compress sudo pip install flask_cors sudo pip install flask_json 1 2 3 4 我这里的配置是2个GTX 1080 Ti,这个时候双卡的优势终于发挥出来了,GPU 1用于预测,GPU 0还可以继续训练模型。 运行服务后会自动生成很多临时的目录和文件,为了方便管理与启动,可建立一个工作目录,并把启动命令写成一个shell脚本。 这里创建的是mobile_svr\bertsvr.sh ,这样可以比较方便地设置服务器启动时自动启动服务,另外增加了每次启动时自动清除临时文件 代码如下: #!/bin/bash #chkconfig: 2345 80 90 #description: 启动BERT分类模型 echo '正在启动 BERT mobile svr...' cd /mnt/sda1/transdat/bert-demo/bert/mobile_svr sudo rm -rf tmp* export BERT_BASE_DIR=/mnt/sda1/transdat/bert-demo/bert/chinese_L-12_H-768_A-12 export TR
最新发布
04-03
<think>好的,我现在需要帮助用户解决如何正确安装和启动 BERT-BiLSTM-CRF-NER 服务端的问题。用户的问题涉及多个步骤,包括安装依赖、克隆仓库、配置环境变量、运行服务以及处理可能的问题。让我先仔细分析用户的需求和提供的引用信息,然后一步步思考解决方案。 首先,用户提到了几个关键点:pip安装bert-base、克隆GitHub仓库、设置环境变量(如BERT_BASE_DIR)、指定GPU和端口参数、解决模块缺失问题以及生成shell脚本自动化启动。我需要确保每个步骤都覆盖到,并且参考用户提供的引用信息。 根据引用[1],用户需要先克隆GitHub仓库并执行安装。步骤应该是git clone和python setup.py install。然后安装bert-base,引用[2]中提到使用pip install bert-base==0.0.7,并指定镜像源。接下来,用户可能还需要安装其他依赖,比如tensorflow,引用[1]中提到了检查tensorflow版本,所以需要确认版本兼容性。 环境变量设置方面,用户提到BERT_BASE_DIR,这可能指向预训练模型的目录,如引用[3]中的路径。需要指导用户正确设置该变量,可能还需要其他变量如CUDA_VISIBLE_DEVICES指定GPU。 启动服务时,用户需要运行server.py并指定参数,如端口和GPU。引用[3]中的命令示例可能有用,但需要调整成服务端启动的命令。此外,用户提到生成shell脚本来自动化流程,可能需要编写一个脚本包含环境变量设置和启动命令。 可能遇到的问题包括模块缺失,比如缺少bert_base或tensorflow,这时候需要引导用户通过pip安装,或者检查路径是否正确。另外,版本冲突也可能出现,比如tensorflow版本过高或过低,需要根据项目要求建议合适的版本。 现在需要将这些步骤组织成一个清晰的流程,确保用户能一步步执行。同时,引用中的信息要正确对应到步骤中,比如引用[1]对应克隆仓库和安装,引用[2]对应安装bert-base,引用[3]中的参数可能帮助配置模型路径,引用[4]中的代码结构可能涉及启动服务时的参数设置。 另外,用户希望生成shell脚本,这部分需要提供一个示例脚本,包含设置环境变量、激活conda环境(如果有)、运行python命令等。同时,提醒用户可能需要修改路径和参数。 最后,总结可能的问题和解决方法,比如模块缺失的处理,以及如何检查GPU是否可用。确保回答覆盖所有用户提到的需求点,并且参考了提供的引用信息,正确标注引用标识。</think>### BERT-BiLSTM-CRF-NER 服务端部署指南 #### 一、安装依赖与克隆仓库 1. **安装 `bert-base` 包** 使用指定版本和镜像源安装: ```bash pip install bert-base==0.0.7 -i https://pypi.python.org/simple [^2] ``` 2. **克隆项目仓库** ```bash git clone https://github.com/macanv/BERT-BiLSTM-CRF-NER [^1] cd BERT-BiLSTM-CRF-NER python setup.py install ``` 3. **安装其他依赖** 检查 `requirements.txt` 并安装: ```bash pip install -r requirements.txt ``` *注意:TensorFlow 版本需与项目兼容,建议使用 1.x 版本或按报错调整*。 --- #### 二、配置环境与模型 1. **设置环境变量** ```bash export BERT_BASE_DIR=/path/to/bert_model # 预训练模型目录[^3] export CUDA_VISIBLE_DEVICES=0 # 指定GPU ``` 2. **下载预训练模型** 从 Google 官方下载 BERT 模型(如 `cased_L-12_H-768_A-12`)并解压至 `BERT_BASE_DIR`。 --- #### 三、启动服务端 1. **基础启动命令** ```bash python server.py \ --bert_model_dir=$BERT_BASE_DIR \ --model_dir=./output \ --port=5555 \ --gpu=0 ``` *参数说明*: - `--port`: 服务监听端口 - `--gpu`: 指定 GPU 编号(单卡为0) - `--model_dir`: 训练好的模型输出目录[^3] 2. **Shell 脚本自动化** 创建 `start_server.sh`: ```bash #!/bin/bash export BERT_BASE_DIR=/path/to/bert_model export CUDA_VISIBLE_DEVICES=0 nohup python server.py --bert_model_dir=$BERT_BASE_DIR --model_dir=./output --port=5555 --gpu=0 > server.log 2>&1 & ``` 赋予执行权限并运行: ```bash chmod +x start_server.sh ./start_server.sh ``` --- #### 四、常见问题解决 1. **模块缺失错误** - **报错 `No module named &#39;bert_base&#39;`** 检查是否安装 `bert-base==0.0.7` 并确认 Python 环境一致[^2]。 - **报错 `tensorflow` 相关错误** 通过 `pip list | grep tensor` 检查版本,建议安装 `tensorflow==1.15.0`。 2. **GPU 不可用问题** 添加 `--use_cpu=true` 参数强制使用 CPU 模式。 --- #### 五、验证服务 通过 `curl` 测试接口: ```bash curl -X POST http://localhost:5555/ner \ -H "Content-Type: application/json" \ -d &#39;{"text": "Apple Inc. was founded by Steve Jobs in California."}&#39; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值