首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的fastapi或uvicorn会被关闭?

为什么我的fastapi或uvicorn会被关闭?
EN

Stack Overflow用户
提问于 2020-12-30 10:46:39
回答 5查看 5.9K关注 0票数 8

我试图运行一个服务,使用简单的变压器罗伯塔模型进行分类。在测试时,推断脚本/函数本身正在按预期工作。当我用快速api包含它时,它会关闭服务器。

代码语言:javascript
运行
复制
uvicorn==0.11.8
fastapi==0.61.1
simpletransformers==0.51.6
cmd : uvicorn --host 0.0.0.0 --port 5000 src.main:app

代码语言:javascript
运行
复制
@app.get("/article_classify")
def classification(text:str):
    """function to classify article using a deep learning model.
    Returns:
        [type]: [description]
    """

    _,_,result = inference(text)
    return result

错误:

代码语言:javascript
运行
复制
INFO:     Started server process [8262]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:5000 (Press CTRL+C to quit)
INFO:     127.0.0.1:36454 - "GET / HTTP/1.1" 200 OK
INFO:     127.0.0.1:36454 - "GET /favicon.ico HTTP/1.1" 404 Not Found
INFO:     127.0.0.1:36454 - "GET /docs HTTP/1.1" 200 OK
INFO:     127.0.0.1:36454 - "GET /openapi.json HTTP/1.1" 200 OK
before
100%|████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 17.85it/s]
INFO:     Shutting down
INFO:     Finished server process [8262]

推理脚本:

代码语言:javascript
运行
复制
model_name = "checkpoint-3380-epoch-20"
model = MultiLabelClassificationModel("roberta","src/outputs/"+model_name)
def inference(input_text,model_name="checkpoint-3380-epoch-20"):
    """Function to run inverence on one sample text"""
    #model = MultiLabelClassificationModel("roberta","src/outputs/"+model_name)
    all_tags =[]
    if isinstance(input_text,str):
        print("before")
        result ,output = model.predict([input_text])
        print(result)
        tags=[]
        for idx,each in enumerate(result[0]):
            if each==1:
                tags.append(classes[idx])
        all_tags.append(tags)
    elif isinstance(input_text,list):
        result ,output = model.predict(input_text)
        tags=[]
        for res in result : 
            for idx,each in enumerate(res):
                if each==1:
                    tags.append(classes[idx])
            all_tags.append(tags)

    return result,output,all_tags

更新:尝试与烧瓶和服务是有效的,但当添加uvicorn之上的烧瓶,它会陷入一个重新启动的循环。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-01-11 05:48:01

我已经通过显式使用多处理启动一个进程池来解决这个问题。

代码语言:javascript
运行
复制
from multiprocessing import set_start_method
from multiprocessing import Process, Manager
try:
    set_start_method('spawn')
except RuntimeError:
    pass
@app.get("/article_classify")
def classification(text:str):
    """function to classify article using a deep learning model.
    Returns:
        [type]: [description]
    """
    manager = Manager()

    return_result = manager.dict()
    # as the inference is failing 
    p = Process(target = inference,args=(text,return_result,))
    p.start()
    p.join()
    # print(return_result)
    result = return_result['all_tags']
    return result
票数 3
EN

Stack Overflow用户

发布于 2022-04-03 20:40:22

虽然接受的解决方案有效,但我想建议一种不那么麻烦的解决方案,使用uvicron工作人员。

您可能想尝试将--workers 4添加到您的CMD中,这样它就可以读到:

代码语言:javascript
运行
复制
uvicorn --host 0.0.0.0 --port 5000 --workers 4 src.main:app
票数 3
EN

Stack Overflow用户

发布于 2021-11-25 17:42:44

根据https://github.com/ThilinaRajapakse/simpletransformers/issues/761的说法,这与多处理有关。

我设置了args={'use_multiprocessing':False},并且web服务器不再关闭。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65505710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档