docker 部署来自Hugging Face下机器翻译模型

机器翻译模型(Hugging Face官网)

模型

模型翻译api服务代码
# 离线翻译服务代码
# -*-coding:utf-8-*-
 
import os
import json
import logging
from logging.handlers import RotatingFileHandler
from datetime import datetime
from flask import Flask, request,jsonify
from gevent import pywsgi
from transformers import pipeline, AutoModelWithLMHead, AutoTokenizer
import warnings, requests
warnings.filterwarnings('ignore')

try:
    print('\n 翻译服务\n')
    
     #日志级别
   # debug->info->warning->error->critical
 
    # 创建日志记录器
    logger = logging.getLogger('requests')
    logger.setLevel(logging.DEBUG)

    # 创建 RotatingFileHandler 处理器
    #模型下载:https://huggingface.co/Helsinki-NLP
    log_filename = './logs/'+datetime.now().strftime('%Y%m%d') + '.log'
    file_handler = RotatingFileHandler(log_filename, maxBytes=1024*1024, backupCount=10)
    file_handler.setLevel(logging.DEBUG)

    # 创建格式化器
    formatter = logging.Formatter('%(asctime)s %(filename)s : %(levelname)s %(message)s')
    file_handler.setFormatter(formatter)
    

    # 将处理器添加到记录器
    logger.addHandler(file_handler)
    logger.info('启动翻译服务...')
     
    
    print('正在加载【汉语-英语】翻译模型...')
    logger.info('正在加载【汉语-英语】翻译模型...')
    
    # 英文翻译成中文
    # AutoModelForSeq2SeqLM.from_pretrained
    model = AutoModelWithLMHead.from_pretrained("Helsinki-NLP/opus-mt-en-zh")
    tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-zh")
    translation = pipeline("translation_en_to_zh", model=model, tokenizer=tokenizer)
    
    #text = "Student accommodation centres, resorts"
    #translated_text = translation(text, max_length=40)[0]['translation_text']

    print('正在加载【英语-汉语】翻译模型...')
    logger.info('正在加载【英语-汉语】翻译模型...')
    # 中文翻译成英文
    model_zh2de = AutoModelWithLMHead.from_pretrained("Helsinki-NLP/opus-mt-zh-en")
    tokenizer_zh2de = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-zh-en")
    translation_en2zh = pipeline("translation_zh_to_en", model=model_zh2de, tokenizer=tokenizer_zh2de)
    
   
    
    
    app = Flask(__name__)

    @app.route('/translater', methods=['POST'])
    def translate():
        try:
            #记录当前请求日志
            data=request.form.to_dict()
            json_data = json.dumps(data, ensure_ascii=False)
            logger.info(f'请求参数:{json_data}')
            
            mod = request.form['model']
            text = request.form['text']
            if mod == 'en2zh':
                result = translation(text, max_length=10240)[0]['translation_text']
            if mod == 'zh2en':
                result = translation_en2zh(text, max_length=10240)[0]['translation_text']
            #不为空
            if result:
               result_data = {'success': True, 'content': result}
            else:
               result_data = {'success': False, 'msg': 'fail'}
            result_json= jsonify(result_data)
        except ZeroDivisionError as e:
            result_data = {'success': False, 'msg': e}
            result_json= jsonify(result_data)
        return result_json

    print('翻译服务已启动,请通过api形式访问该服务地址:http://127.0.0.1:16999/translater')
    logger.info('翻译服务已启动,请通过api形式访问该服务地址:http://127.0.0.1:16999/translater')
    server = pywsgi.WSGIServer(('0.0.0.0', 16999), app)
    server.serve_forever()

except  Exception as e:
    print(f'翻译服务异常:{e}')
    logger.error(f'翻译服务异常:{e}')
  


安装依赖requirements.txt文件
torch
flask
gevent
transformers
sentencepiece
Dockerfile文件
#使用一个基础的Python镜像作为基础
FROM python:3.8

WORKDIR /app

EXPOSE 16999

WORKDIR /app

#将发布文件复制到容器目录
COPY . /app

# 安装依赖
RUN pip install -r requirements.txt
 
ENTRYPOINT ["python", "Translate.py"]
构建docker镜像
#构建,--no-cache 参数表示每次构建构建不使用缓存
docker build --no-cache -t translate.api:latest -f Dockerfile .

#运行容器
docker run -d  -p 16999:16999 -v /translate/logs:/app/logs   translate.api:latest 

镜像
容器
翻译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/293866.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS——软件定时器知识总结及其实战

1.软件定时器概念 是指具有定时功能的软件,可设置定时周期,当指定时间到达后要调用回调函数(也称超时函数),用户在回调函数中处理信息。 2 软件定时器使用特点 1)如果要使能软件定时器,需将c…

【XR806开发板使用】开发环境搭建、Hello工程以及开发事项

XR806开发板试用 很有幸能获得本次技术社区和全志组织的XR806开发板试用活动。之前开发的嵌入式应用都是在Windows平台上进行的,对于Linux下的开发并不熟悉,在社区里看到群友使用官方提供的docker环境进行开发,顺着群友的指导,找…

ROS学习笔记(11)进一步深入了解ROS第五步

0.前提 我在学习宾夕的ROS公开课的时候发现,外国的对计算机的教育和国内的是完全不一样的,当你接触了外国的课程后回头看自己学的会发现好像自己啥也没学。我这里可以放出来给大家看一下。 1.Python and C 2.Python PDB Tutorial:Python Deb…

产业认可 | 开源网安荣获 CCIA“2023 年度优秀会员单位”

​1月4日,“2023年度中国网络安全产业联盟成员大会暨理事会”在京召开,开源网安作为成员单位受邀出席本次大会。 在会上,联盟发布了关于2023年度表彰先进的决定,作为中国软件安全领域的创领者,开源网安在技术、实践和创…

计算机毕业设计-----ssm情缘图书馆管理系统

功能介绍 基于SSM的情缘图书馆管理系统。SSM框架,适合java初学者。 主要功能包括: 图书编目管理:图书编目、编目维护; 图书信息管理:图书录入、图书信息; 图书借阅管理:借阅图书、借阅信息…

OpenAI ChatGPT-4开发笔记2024-03:Chat之Function Calling/Function/Tool/Tool_Choice

Updates on Function Calling were a major highlight at OpenAI DevDay. In another world,原来的function call都不再正常工作了,必须全部重写。 function和function call全部由tool和tool_choice取代。2023年11月之前关于function call的代码都准备翘翘。 干嘛…

新耀莱要约收购接近尾声,此前共有4713万股接纳要约

新耀莱要约收购事件近期即将结束,引起了资本市场的广泛关注和讨论。作为曾经在汽车经销领域风光无限的企业,新耀莱如今面临衰退的结局,确实令人唏嘘。从财务数据的恶化到核心业务的萎靡,新耀莱的经营表现已无法令人乐观。而随着公司要约收购临近尾声,不少投资者都在担忧,新耀莱…

HTML5+CSS3小实例:文字涂抹动画

实例:文字涂抹动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><me…

后端开发——JDBC的学习(三)

本篇继续对JDBC进行总结&#xff1a; ①通过Service层与Dao层实现转账的练习&#xff1b; ②重点&#xff1a;由于每次使用连接就手动创建连接&#xff0c;用完后就销毁&#xff0c;这样会导致资源浪费&#xff0c;因此引入连接池&#xff0c;练习连接池的使用&#xff1b; …

太阳能组件紫外预处理试验箱

太阳能组件紫外预处理试验箱波长范围&#xff1a;280-400nm用于太阳能光伏组件的温湿度及相类似紫外预处理环境的试验&#xff0c;主要用于太阳能组件材料评估诸如聚合物和保护层等材料抗紫外辐照能力&#xff0c;在预处理试验过程中能够快速、真实地再现阳光、雨、露等环境及对…

Etcd安装以及操作

Etcd介绍 etcd 是一个高度一致的分布式键值 (key-value) 存储&#xff0c;它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举&#xff0c;即使在 领导者节点中也可以容忍机器故障。 etcd 是用 Go 语言编写的&a…

Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!

响应与Rest风格 1.11.1.1 环境准备步骤1:设置返回页面步骤2:启动程序测试 1.1.2 返回文本数据步骤1:设置返回文本内容步骤2:启动程序测试 1.1.3 响应JSON数据响应POJO对象响应POJO集合对象 知识点1&#xff1a;ResponseBody 2&#xff0c;Rest风格2.1 REST简介2.2 RESTful入门案…

Linux上搭建YApi

YApi是http接口管理和测试的重要工具&#xff0c;其作用相当于原来用的postman&#xff0c;但是比postman有更多的功能&#xff0c;本篇文章主要介绍如何在linux环境中快速的安装&#xff08;利用yum命令安装&#xff09;和部署YApi 一、nodejs 安装 1.1 下载nodejs包 yum i…

iPaaS与ETL:了解它们的主要区别

平均每个组织使用 130 多个应用程序&#xff0c;这一数字同比增长 30%。 随着公司试图充分利用其不断增长的应用程序生态系统&#xff0c;他们已经转向可以集成它们和/或其数据的工具。两个常用选项包括集成平台即服务 &#xff08;iPaaS&#xff09; 和提取、传输、加载 &…

pytorch08:学习率调整策略

目录 一、为什么要调整学习率&#xff1f;1.1 class _LRScheduler 二、pytorch的六种学习率调整策略2.1 StepLR2.2 MultiStepLR2.3 ExponentialLR2.4 CosineAnnealingLR2.5 ReduceLRonPlateau2.6 LambdaLR 三、学习率调整小结四、学习率初始化 一、为什么要调整学习率&#xff…

宝宝洗衣机哪个牌子质量好?好用的小型洗衣机推荐

当婴儿的到来&#xff0c;确实会给家庭带来许多变化&#xff0c;就好比如对于宝宝相关衣物的清洗需求。对于新生儿及婴幼儿的衣服&#xff0c;一般都要给予特殊的照顾与清洗&#xff0c;以保证不含细菌及过敏原。尤其是刚刚出生的婴儿&#xff0c;这时候宝宝们的皮肤很是幼嫩。…

JAVA基础学习笔记-day12-泛型

JAVA基础学习笔记-day12-泛型 1. 泛型概述1.1 泛型的引入 2. 使用泛型举例2.1 集合中使用泛型2.2 相关使用说明 3. 自定义泛型结构3.1 泛型的基础说明3.2 自定义泛型类或泛型接口3.2.1 说明3.2.2 注意 3.3 自定义泛型方法3.3.1 说明 4. 泛型在继承上的体现5. 通配符的使用5.1 通…

MySQL面试题汇总

常规&#xff1a; 1、数据库三大范式 1NF : 表中字段的数据不可再拆分。(原子性)2NF : 在满足第一范式的情况下&#xff0c;遵循唯一性&#xff0c;消除部分依赖。即&#xff0c;表中任意一个主键或任意一组联合主键&#xff0c;可以确定除该主键外的所有的非主键值。(一个表…

(适趣AI)Vue笔试题

&#x1f4d1;前言 本文主要是【Vue】——&#xff08;适趣AI&#xff09;Vue笔试题的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

Android studio报错误提示 Some Kotlin libraries attached to this project 问题解决方案

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 Android新建项目后&#xff0c;报以下错误 错误提示内容为&#xff1a; 这个项目附带的一…