Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O servidor HTTP de inferência do Azure Machine Learning é um pacote Python que expõe sua função de pontuação como um ponto de extremidade HTTP e encapsula o código e as dependências do servidor Flask em um pacote singular. O servidor de inferência é incluído nas imagens pré-criadas do Docker para inferência que são usadas quando você implanta um modelo no Aprendizado de Máquina do Azure. Quando você usa o pacote sozinho, pode implantar o modelo localmente para produção. Você também pode validar facilmente seu script de pontuação (entrada) em um ambiente de desenvolvimento local. Se houver um problema com o script de pontuação, o servidor de inferência retornará um erro e o local do erro.
Você também pode usar o servidor de inferência para criar portas de validação em um pipeline contínuo de integração e implantação. Por exemplo, você pode iniciar o servidor de inferência com o script candidato e executar o conjunto de testes no ponto de extremidade local.
Este artigo oferece suporte a desenvolvedores que desejam usar o servidor de inferência para depurar localmente. Neste artigo, irá ver como usar o servidor de inferência com endpoints online.
Pré-requisitos
- Python 3.8 ou posterior
- Anaconda
O servidor de inferência é executado em sistemas operacionais baseados em Windows e Linux.
Explore as opções de depuração local para endpoints online
Ao depurar endpoints localmente antes de implantar na nuvem, pode detetar erros no seu código e configuração desde o início. Para depurar pontos de extremidade localmente, você tem várias opções, incluindo:
- O servidor HTTP de inferência do Azure Machine Learning.
- Um ponto de extremidade local.
A tabela a seguir fornece uma visão geral do suporte que cada opção oferece para vários cenários de depuração:
| Cenário | Servidor de inferência | Ponto final local |
|---|---|---|
| Atualize o ambiente Python local sem a reconstrução da imagem do Docker | Sim | Não |
| Atualizar script de pontuação | Sim | Sim |
| Atualizar configurações de implantação (implantação, ambiente, código, modelo) | Não | Sim |
| Integrar o depurador do Microsoft Visual Studio Code (VS Code) | Sim | Sim |
Este artigo descreve como usar o servidor de inferência.
Ao executar o servidor de inferência localmente, você pode se concentrar em depurar seu script de pontuação sem se preocupar com as configurações do contêiner de implantação.
Depurar seu script de pontuação localmente
Para depurar seu script de pontuação localmente, você tem várias opções para testar o comportamento do servidor de inferência:
- Use um script de pontuação fictício.
- Utilize o VS Code para depurar com o pacote azureml-inference-server-http.
- Execute um script de pontuação real, um arquivo de modelo e um arquivo de ambiente a partir do repositório de exemplos.
As seções a seguir fornecem informações sobre cada opção.
Usar um script de pontuação fictícia para testar o comportamento do servidor de inferência
Crie um diretório chamado server_quickstart para armazenar seus arquivos:
mkdir server_quickstart cd server_quickstartPara evitar conflitos de pacotes, crie um ambiente virtual, como
myenvo , e ative-o:python -m virtualenv myenvNota
No Linux, execute o
source myenv/bin/activatecomando para ativar o ambiente virtual.Depois de testar o servidor de inferência, você pode executar o
deactivatecomando para desativar o ambiente virtual Python.Instale o
azureml-inference-server-httppacote a partir do feed Python Package Index (PyPI):python -m pip install azureml-inference-server-httpCrie seu script de entrada. O exemplo a seguir cria um script de entrada básico e o salva em um arquivo chamado score.py:
echo -e 'import time\ndef init(): \n\ttime.sleep(1) \n\ndef run(input_data): \n\treturn {"message":"Hello, World!"}' > score.pyUse o
azmlinfsrvcomando para iniciar o servidor de inferência e definir o arquivo score.py como o script de entrada:azmlinfsrv --entry_script score.pyNota
O servidor de inferência é hospedado em 0.0.0.0, o que significa que ele ouve todos os endereços IP da máquina de hospedagem.
Use o
curlutilitário para enviar uma solicitação de pontuação para o servidor de inferência:curl -p 127.0.0.1:5001/scoreO servidor de inferência publica a seguinte resposta:
{"message": "Hello, World!"}Quando terminar o teste, selecione Ctrl+C para parar o servidor de inferência.
Você pode modificar o arquivo de script de pontuação score.py. Em seguida, você pode testar suas alterações usando o azmlinfsrv --entry_script score.py comando para executar o servidor de inferência novamente.
Integração com o VS Code
No VS Code, você pode usar a extensão Python para depuração com o pacote azureml-inference-server-http . O VS Code oferece dois modos de depuração: iniciar e anexar.
Antes de usar qualquer um dos modos, instale o azureml-inference-server-http pacote executando o seguinte comando:
python -m pip install azureml-inference-server-http
Nota
Para evitar conflitos de pacote, instale o servidor de inferência em um ambiente virtual. Você pode usar o pip install virtualenv comando para ativar ambientes virtuais para sua configuração.
Modo de inicialização
Para o modo de inicialização, execute as seguintes etapas para configurar o VS Code launch.json arquivo de configuração e iniciar o servidor de inferência dentro do VS Code:
Inicie o VS Code e abra a pasta que contém o script score.py.
Para esse espaço de trabalho no VS Code, adicione a seguinte configuração ao arquivo launch.json:
{ "version": "0.2.0", "configurations": [ { "name": "Debug score.py", "type": "debugpy", "request": "launch", "module": "azureml_inference_server_http.amlserver", "args": [ "--entry_script", "score.py" ] } ] }Inicie a sessão de depuração no VS Code selecionando Executar>Iniciar Depuração ou selecionando F5.
Modo de anexação
Para o modo de anexação, execute as seguintes etapas para usar o VS Code com a extensão Python para anexar ao processo do servidor de inferência:
Nota
Para Linux, primeiro instale o gdb pacote executando o sudo apt-get install -y gdb comando.
Inicie o VS Code e abra a pasta que contém o script score.py.
Para esse espaço de trabalho no VS Code, adicione a seguinte configuração ao arquivo launch.json:
{ "version": "0.2.0", "configurations": [ { "name": "Python: Attach using Process ID", "type": "debugpy", "request": "attach", "processId": "${command:pickProcess}", "justMyCode": true } ] }Em uma janela de comando, inicie o servidor de inferência executando o
azmlinfsrv --entry_script score.pycomando.Execute as seguintes etapas para iniciar a sessão de depuração no VS Code:
Selecione Executar>Iniciar Depuração ou selecione F5.
Na janela de comando, pesquise os logs do servidor de inferência para localizar a ID de processo do
azmlinfsrvprocesso.Certifique-se de localizar o ID do
azmlinfsrvprocesso, não ogunicornprocesso.No depurador VS Code, insira o ID do processo
azmlinfsrv.Se não conseguir ver o selector de processos do VS Code, insira manualmente o ID do processo no campo
processIddo arquivo launch.json do espaço de trabalho.
Para os modos de inicialização e anexação, você pode definir pontos de interrupção e depurar o script passo a passo.
Use um exemplo de ponta a ponta
O procedimento a seguir executa o servidor de inferência localmente com arquivos de exemplo do repositório de exemplo do Azure Machine Learning. Os arquivos de exemplo incluem um script de pontuação, um arquivo de modelo e um arquivo de ambiente. Para obter mais exemplos de como usar esses arquivos de exemplo, consulte Implantar e pontuar um modelo de aprendizado de máquina usando um ponto de extremidade online.
Clone o repositório de exemplo e vá para a pasta que contém os arquivos de exemplo relevantes:
git clone --depth 1 https://github.com/Azure/azureml-examples cd azureml-examples/cli/endpoints/online/model-1/Use conda para criar e ativar um ambiente virtual:
Neste exemplo, o
azureml-inference-server-httppacote é instalado automaticamente. O pacote está incluído como uma biblioteca dependente doazureml-defaultspacote, que está listado no arquivo conda.yaml.# Create the environment from the YAML file. conda env create --name model-env -f ./environment/conda.yaml # Activate the new environment. conda activate model-envReveja o script de pontuação, onlinescoring/score.py:
import os import logging import json import numpy import joblib def init(): """ This function is called when the container is initialized/started, typically after create/update of the deployment. You can write the logic here to perform init operations like caching the model in memory """ global model # AZUREML_MODEL_DIR is an environment variable created during deployment. # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION) # Please provide your model's folder name if there is one model_path = os.path.join( os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl" ) # deserialize the model file back into a sklearn model model = joblib.load(model_path) logging.info("Init complete") def run(raw_data): """ This function is called for every invocation of the endpoint to perform the actual scoring/prediction. In the example we extract the data from the json input and call the scikit-learn model's predict() method and return the result back """ logging.info("model 1: request received") data = json.loads(raw_data)["data"] data = numpy.array(data) result = model.predict(data) logging.info("Request processed") return result.tolist()Execute o servidor de inferência especificando o script de pontuação e o caminho para a pasta modelo.
Durante a implantação, a
AZUREML_MODEL_DIRvariável é definida para armazenar o caminho para a pasta modelo. Você especifica esse valor nomodel_dirparâmetro. Quando o script de pontuação é executado, ele recupera o valor daAZUREML_MODEL_DIRvariável.Nesse caso, use o diretório atual,
./, como omodel_dirvalor, porque o script de pontuação especifica o subdiretório comomodel/sklearn_regression_model.pkl.azmlinfsrv --entry_script ./onlinescoring/score.py --model_dir ./Quando o servidor de inferência é iniciado com sucesso e invoca o script de pontuação, abre-se o log de inicialização de exemplo. Caso contrário, o log mostra mensagens de erro.
Teste o script de pontuação com dados de exemplo executando as seguintes etapas:
Abra outra janela de comando e vá para o mesmo diretório de trabalho em que você executou o
azmlinfsrvcomando.Use o seguinte
curlutilitário para enviar uma solicitação de exemplo para o servidor de inferência e receber um resultado de pontuação:curl --request POST "127.0.0.1:5001/score" --header "Content-Type:application/json" --data @sample-request.jsonQuando não há problemas no seu script de pontuação, o script retorna o resultado da pontuação. Se ocorrerem problemas, você pode atualizar o script de pontuação e, em seguida, iniciar o servidor de inferência novamente para testar o script atualizado.
Revisar rotas do servidor de inferência
O servidor de inferência escuta na porta 5001 por padrão nas seguintes rotas:
| Nome | Rota |
|---|---|
| Sonda de vivacidade | 127.0.0.1:5001/ |
| Pontuação | 127.0.0.1:5001/score |
| OpenAPI (swagger) | 127.0.0.1:5001/swagger.json |
Revisar os parâmetros do servidor de inferência
O servidor de inferência aceita os seguintes parâmetros:
| Parâmetro | Necessário | Predefinição | Descrição |
|---|---|---|---|
entry_script |
Verdade | N/A | Identifica o caminho relativo ou absoluto para o script de pontuação |
model_dir |
Falso | N/A | Identifica o caminho relativo ou absoluto para o diretório que contém o modelo usado para inferência |
port |
Falso | 5001 | Especifica a porta de serviço do servidor de inferência |
worker_count |
Falso | 1 | Fornece o número de processos de trabalho para processar requisições simultâneas |
appinsights_instrumentation_key |
Falso | N/A | Fornece a chave de instrumentação para a instância do Application Insights onde os registos são publicados |
access_control_allow_origins |
Falso | N/A | Ativa o compartilhamento de recursos entre origens (CORS) para as origens especificadas, onde várias origens são separadas por uma vírgula (,), como microsoft.com, bing.com |
Explore o processamento de solicitações do servidor de inferência
As etapas a seguir demonstram como o servidor de inferência, azmlinfsrv, lida com solicitações de entrada:
Um wrapper de CLI Python fica ao redor da pilha de rede do servidor de inferência e é usado para iniciar o servidor de inferência.
Um cliente envia uma solicitação para o servidor de inferência.
O servidor de inferência envia a solicitação por meio do servidor WSGI (Web Server Gateway Interface ), que despacha a solicitação para um dos seguintes aplicativos de trabalho do Flask:
O aplicativo Flask worker lida com a solicitação, o que inclui o carregamento do script de entrada e quaisquer dependências.
Seu script de entrada recebe a solicitação. O script de entrada faz uma chamada de inferência para o modelo carregado e retorna uma resposta.
Explorar os registos do servidor de inferência
Há duas maneiras de obter dados de log para o teste do servidor de inferência:
- Execute o
azureml-inference-server-httppacote localmente e visualize a saída do log. - Use pontos de extremidade online e visualize os logs de contêiner. O log do servidor de inferência é chamado Versão do servidor <>HTTP de Inferência do Azure Machine Learning.
Nota
O formato de registo foi alterado desde a versão 0.8.0. Se o log usar um estilo diferente do esperado, atualize o azureml-inference-server-http pacote para a versão mais recente.
Ver registos de arranque
Quando o servidor de inferência é iniciado, os logs mostram as seguintes configurações iniciais do servidor:
Azure ML Inferencing HTTP server <version>
Server Settings
---------------
Entry Script Name: <entry-script>
Model Directory: <model-directory>
Config File: <configuration-file>
Worker Count: <worker-count>
Worker Timeout (seconds): None
Server Port: <port>
Health Port: <port>
Application Insights Enabled: false
Application Insights Key: <Application-Insights-instrumentation-key>
Inferencing HTTP server version: azmlinfsrv/<version>
CORS for the specified origins: <access-control-allow-origins>
Create dedicated endpoint for health: <health-check-endpoint>
Server Routes
---------------
Liveness Probe: GET 127.0.0.1:<port>/
Score: POST 127.0.0.1:<port>/score
<logs>
Por exemplo, quando você executa o servidor de inferência executando as etapas de exemplo de ponta a ponta , os logs contêm as seguintes informações:
Azure ML Inferencing HTTP server v1.2.2
Server Settings
---------------
Entry Script Name: /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
Model Directory: ./
Config File: None
Worker Count: 1
Worker Timeout (seconds): None
Server Port: 5001
Health Port: 5001
Application Insights Enabled: false
Application Insights Key: None
Inferencing HTTP server version: azmlinfsrv/1.2.2
CORS for the specified origins: None
Create dedicated endpoint for health: None
Server Routes
---------------
Liveness Probe: GET 127.0.0.1:5001/
Score: POST 127.0.0.1:5001/score
2022-12-24 07:37:53,318 I [32726] gunicorn.error - Starting gunicorn 20.1.0
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Listening at: http://0.0.0.0:5001 (32726)
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Using worker: sync
2022-12-24 07:37:53,322 I [32756] gunicorn.error - Booting worker with pid: 32756
Initializing logger
2022-12-24 07:37:53,779 I [32756] azmlinfsrv - Starting up app insights client
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Found user script at /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - run() is not decorated. Server will invoke it with the input in JSON string.
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Invoking user's init function
2022-12-24 07:37:55,974 I [32756] azmlinfsrv.user_script - Users's init has completed successfully
2022-12-24 07:37:55,976 I [32756] azmlinfsrv.swagger - Swaggers are prepared for the following versions: [2, 3, 3.1].
2022-12-24 07:37:55,976 I [32756] azmlinfsrv - Scoring timeout is set to 3600000
2022-12-24 07:37:55,976 I [32756] azmlinfsrv - Worker with pid 32756 ready for serving traffic
Compreender o formato dos dados de registo
Todos os logs do servidor de inferência, exceto o script iniciador, apresentam dados no seguinte formato:
<UTC-time> <level> [<process-ID>] <logger-name> - <message>
Cada entrada é composta pelos seguintes componentes:
-
<UTC-time>: A hora em que a entrada é inserida no log -
<level>: O primeiro caractere do nível de log para a entrada, comoEpara ERROR,Ipara INFO, e assim por diante -
<process-ID>: O ID do processo associado à entrada -
<logger-name>: O nome do recurso associado à entrada de log -
<message>: O conteúdo da mensagem de log
Há seis níveis de logging em Python. Cada nível tem um valor numérico atribuído de acordo com a sua gravidade:
| Nível de registo | Valor numérico |
|---|---|
| CRÍTICA | 50 |
| ERRO | 40 |
| ADVERTÊNCIA | 30 |
| INFORMAÇÃO | 20 |
| DEPURAR | 10 |
| NOTSET | 0 |
Solucionar problemas do servidor de inferência
As seções a seguir fornecem dicas básicas de solução de problemas para o servidor de inferência. Para solucionar problemas de pontos de extremidade online, consulte Solucionar problemas de implantação e pontuação de pontos de extremidade online.
Verifique os pacotes instalados
Siga estas etapas para resolver problemas com pacotes instalados:
Reúna informações sobre pacotes instalados e versões para seu ambiente Python.
No arquivo de ambiente, verifique a versão do pacote Python
azureml-inference-server-httpespecificada. Nos logs de inicialização do servidor HTTP de inferência do Azure Machine Learning, verifique a versão do servidor de inferência exibida. Confirme se as duas versões coincidem.Em alguns casos, o resolvedor de dependência pip instala versões de pacote inesperadas. Talvez seja necessário executar
pippara corrigir os pacotes e versões instalados.Se especificares o Flask ou as suas dependências no teu ambiente, remove estes itens.
- Os pacotes dependentes incluem
flask,jinja2,itsdangerous,werkzeug,markupsafeeclick. - O
flaskpacote é listado como uma dependência no pacote do servidor de inferência. A melhor abordagem é permitir que o servidor de inferência instale oflaskpacote. - Quando o servidor de inferência é configurado para suportar novas versões do Flask, o servidor de inferência recebe automaticamente as atualizações do pacote à medida que ficam disponíveis.
- Os pacotes dependentes incluem
Verifique a versão do servidor de inferência
O azureml-inference-server-http pacote do servidor é publicado no PyPI. A página PyPI lista o changelog e todas as versões do pacote.
Se você usar uma versão inicial do pacote, atualize sua configuração para a versão mais recente. A tabela a seguir resume versões estáveis, problemas comuns e ajustes recomendados:
| Versão de pacote | Descrição | Problema | Resolução |
|---|---|---|---|
| 0.4.x | Incluído em imagens de treinamento datadas 20220601 ou anteriores e azureml-defaults versões de pacote 0.1.34 a 1.43. Última versão estável é 0.4.13. |
Para versões de servidor anteriores à 0.4.11, você pode encontrar problemas de dependência do Flask, como can't import name Markup from jinja2. |
Atualize para a versão 0.4.13 ou 1.4.x, a versão mais recente, se possível. |
| 0,6.x | Pré-instalado na inferência de imagens datadas 20220516 e anteriores. Última versão estável é 0.6.1. |
N/A | N/A |
| 0,7.x | Suporta Flask 2. Última versão estável é 0.7.7. | N/A | N/A |
| 0.8.x | Usa um formato de log atualizado. Encerra o suporte para Python 3.6. | N/A | N/A |
| 1.0.x | Encerra o suporte para Python 3.7. | N/A | N/A |
| 1.1.x | Migra para 2.0 pydantic . |
N/A | N/A |
| 1.2.x | Adiciona suporte para Python 3.11. Atualizações gunicorn para a versão 22.0.0. Atualizações werkzeug para a versão 3.0.3 e versões posteriores. |
N/A | N/A |
| 1.3.x | Adiciona suporte para Python 3.12. Atualiza certifi para a versão 2024.7.4. Atualiza flask-cors para a versão 5.0.0. Atualiza os pacotes gunicorn e pydantic. |
N/A | N/A |
| 1.4.x | Atualizações waitress para a versão 3.0.1. Termina o suporte para Python 3.8. Remove a camada de compatibilidade que impede que a atualização do Flask 2.0 quebre o código objeto da solicitação. |
Se você depender da camada de compatibilidade, o código objeto da solicitação pode não funcionar. | Migre seu script de pontuação para o Flask 2. |
Verificar dependências do pacote
Os pacotes dependentes mais relevantes para o pacote de azureml-inference-server-http servidor incluem:
flaskopencensus-ext-azureinference-schema
Se você especificar o azureml-defaults pacote em seu ambiente Python, o azureml-inference-server-http pacote será um pacote dependente. A dependência é instalada automaticamente.
Gorjeta
Se você usar o SDK do Azure Machine Learning para Python v1 e não especificar explicitamente o azureml-defaults pacote em seu ambiente Python, o SDK poderá adicionar automaticamente o pacote. No entanto, a versão do pacote está bloqueada em relação à versão do SDK. Por exemplo, se a versão do SDK for 1.38.0, a azureml-defaults==1.38.0 entrada será adicionada aos requisitos de pip do ambiente.
TypeError durante a inicialização do servidor de inferência
Você pode encontrar o seguinte TypeError durante a inicialização do servidor de inferência:
TypeError: register() takes 3 positional arguments but 4 were given
File "/var/azureml-server/aml_blueprint.py", line 251, in register
super(AMLBlueprint, self).register(app, options, first_registration)
TypeError: register() takes 3 positional arguments but 4 were given
Este erro ocorre quando você tem o Flask 2 instalado em seu ambiente Python, mas sua azureml-inference-server-http versão do pacote não suporta o Flask 2. O suporte para o Flask 2 está disponível no azureml-inference-server-http pacote 0.7.0 e versões posteriores, e no azureml-defaults pacote 1.44 e versões posteriores.
Se você não usar o pacote Flask 2 em uma imagem do Docker do Azure Machine Learning, use a versão mais recente do
azureml-inference-server-httppacote ouazureml-defaults.Se você usar o pacote Flask 2 em uma imagem do Docker do Azure Machine Learning, confirme se a versão de compilação da imagem é
July 2022ou posterior.Você pode encontrar a versão da imagem nos logs do contêiner. Por exemplo, consulte as seguintes declarações de registo:
2022-08-22T17:05:02,147738763+00:00 | gunicorn/run | AzureML Container Runtime Information 2022-08-22T17:05:02,161963207+00:00 | gunicorn/run | ############################################### 2022-08-22T17:05:02,168970479+00:00 | gunicorn/run | 2022-08-22T17:05:02,174364834+00:00 | gunicorn/run | 2022-08-22T17:05:02,187280665+00:00 | gunicorn/run | AzureML image information: openmpi4.1.0-ubuntu20.04, Materialization Build:20220708.v2 2022-08-22T17:05:02,188930082+00:00 | gunicorn/run | 2022-08-22T17:05:02,190557998+00:00 | gunicorn/run |A data de compilação da imagem aparece após a
Materialization Buildnotação. No exemplo anterior, a versão da imagem é20220708, ou 8 de julho de 2022. A imagem neste exemplo é compatível com o Flask 2.Se você não vir uma mensagem semelhante no log do contêiner, sua imagem está desatualizada e deve ser atualizada. Se você usar uma imagem CUDA (Compute Unified Device Architecture) e não conseguir encontrar uma imagem mais recente, verifique o repositório AzureML-Containers para ver se sua imagem foi preterida. Você pode encontrar substitutos designados para imagens obsoletas.
Se utilizar o servidor de inferência com um endpoint online, também poderá encontrar os logs no Azure Machine Learning Studio. Na página do seu ponto de extremidade, selecione a guia Logs .
Se você implantar com o SDK v1 e não especificar explicitamente uma imagem em sua configuração de implantação, o servidor de inferência aplicará o pacote com uma versão que corresponda ao openmpi4.1.0-ubuntu20.04 conjunto de ferramentas SDK local. No entanto, a versão instalada pode não ser a versão mais recente disponível da imagem.
Para o SDK versão 1.43, o servidor de inferência instala a versão do pacote por padrão, mas essa versão do pacote não é compatível com o openmpi4.1.0-ubuntu20.04:20220616 SDK 1.43. Certifique-se de usar o SDK mais recente para sua implantação.
Se não for possível atualizar a imagem, você poderá evitar temporariamente o problema fixando as azureml-defaults==1.43 entradas ou azureml-inference-server-http~=0.4.13 no arquivo de ambiente. Essas entradas direcionam o servidor de inferência para instalar a versão mais antiga com flask 1.0.x.
ImportError ou ModuleNotFoundError durante a inicialização do servidor de inferência
Você pode encontrar um ImportError ou ModuleNotFoundError em módulos específicos, como opencensus, jinja2, markupsafe, ou click, durante a inicialização do servidor de inferência. O exemplo a seguir mostra a mensagem de erro:
ImportError: cannot import name 'Markup' from 'jinja2'
Os erros de importação e módulo ocorrem quando você usa a versão 0.4.10 ou versões anteriores do servidor de inferência que não fixam a dependência do Flask em uma versão compatível. Para evitar o problema, instale uma versão posterior do servidor de inferência.