Índice
A configuração inicial usa conexão Xshell
Inicie o projeto Docker no servidor
A configuração inicial usa conexão Xshell
Como prefiro usar o xshell para operar o servidor, se você estiver usando o CloudShell da Huawei Online ou outros métodos, poderá pular a primeira etapa da operação de conexão.
Ao escolher um servidor, escolhi o Portainer de visualização do Docker da instância Yunyao Cloud Server L. O ambiente docker de que precisamos já foi implantado nele, portanto, não há necessidade de instalá-lo manualmente.
Em primeiro lugar, após a compra bem-sucedida do servidor, o primeiro passo é encontrar nosso console, clicar no servidor que deseja usar a seguir, clicar no apelido do servidor, entrar na página de detalhes das informações básicas e clicar em Redefinir no mais caixa suspensa no canto superior direito senha.
Digite a senha que queremos definir na janela pop-up, lembre-se deste segredo, você precisará dele mais tarde.
Após a conclusão da entrada, selecione o método de verificação, preencha o código de verificação e clique em Confirmar para concluir a operação de alteração de senha.
Em seguida, clique na placa de rede elástica e copie o endereço IP público elástico abaixo
Ou volte ao nosso console e uma caixa de prompt aparecerá para visualizar o endereço IP quando o mouse permanecer nele.
Abra o xshell, preencha o endereço IP acima no número do host, clique em Confirmar e uma autenticação aparecerá. Preencha a senha que acabamos de inserir na senha de redefinição e a conexão será bem-sucedida.
Preparação do projeto
Como o tema deste capítulo é implantar o projeto Ai do YOLO no servidor usando docker, não entraremos em detalhes sobre como construir o projeto anterior, mas apenas explicaremos a parte de configuração do docker.
Vamos revisar brevemente os projetos anteriores.
No primeiro blog, instalamos as dependências de sistema necessárias, extraímos o código-fonte do yolov5 e treinamos um arquivo de peso .pt.
Link do blog: https://blog.csdn.net/weixin_65243968/article/details/127189585
No segundo blog, usamos os arquivos de peso treinados para construir uma interface web e API de reconhecimento localmente.
Após a conclusão das etapas acima, colocamos o projeto em uma pasta de aplicativo e, em seguida, criamos docker-compose, dockerfile e um .dockerignore
Então vamos codificar esses três arquivos.
docker-compose
version: '1'
services:
core-api:
build:
context: .
dockerfile: ./Dockerfile
command: python server.py --host 0.0.0.0
restart: always
volumes:
- "./apps:/apps"
ports:
- 8005:8005
environment:
- TZ=Asia/Guangzhou
deploy:
resources:
limits:
cpus: '4'
memory: 20000M
platform: "linux/amd64"
Neste docker-compose
Versão refere-se ao número da versão
services define a lista de serviços a serem criados
core-api é o nome do serviço e pode ser customizado conforme necessário.
build especifica o contexto de construção e a localização do Dockerfile.
comando especifica o comando a ser executado ao iniciar o contêiner e define o endereço do host como 0.0.0.0 para que o contêiner possa receber solicitações de qualquer interface de rede.
Reiniciar significa que o contêiner reinicia automaticamente ao sair
Volumes: Defina o relacionamento de mapeamento do volume de dados entre o contêiner e o host
Portas: mapeie a porta 8005 do contêiner para a porta 8005 do host para que os serviços no contêiner possam ser acessados por meio da porta do host.
- TZ=Ásia/Xangai: Defina o fuso horário para Xangai (Ásia/Xangai)
cpus: '4': especifica que o número máximo de núcleos de CPU que o contêiner pode usar é 4.
memória: 20000M: A memória máxima que o contêiner especificado pode usar é 2 GB.
platform: "linux/AMD64": especifica o tipo de imagem da plataforma como Linux/AMD64. Isso significa que a imagem do contêiner gerada será baseada no sistema operacional Linux com arquitetura x86_64.
Dockerfile
FROM python:3.8.6-buster AS build
WORKDIR /apps
COPY ./apps ./
RUN apt-get update && apt-get install -y \
libgl1-mesa-glx
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir
No arquivo arquivo, primeiro especifique a imagem base como python:3.8.6-buster
Defina o diretório de trabalho para apps e copie nosso projeto nele através do comando COPY
Execute o comando apt-get no contêiner para atualizar a lista de pacotes e instalar o pacote libgl1-mesa-glx.
Por fim, execute o comando pip no contêiner para instalar os pacotes de dependência especificados no arquivo requirements.txt, baixe-os e instale-os por meio da fonte espelhada PyPI da Universidade Tsinghua e desative o cache.
.dockerignore
__pycache__/*
*/__pycache__/*
O arquivo dockerignore é usado para informar ao Docker quais arquivos ou diretórios não precisam ser copiados para a imagem do Docker.
__pycache__/* representa todos os arquivos no diretório __pycache__ e */__pycache__/* representa todos os arquivos __pycache__ em todos os subdiretórios
Esses são arquivos de bytecode armazenados gerados pelo interpretador Python, portanto não precisamos copiá-los para a imagem.
Inicie o projeto Docker no servidor
Como o servidor que comprei é o Portainer de visualização Docker de Yunyaoyun, já existe um ambiente Docker interno, então não preciso implantá-lo sozinho, o que é muito conveniente.
Abra o Xftp e copie nosso projeto nele.
Entre na pasta do nosso projeto no xshell e execute docker-compse up. Neste momento a imagem já está baixando. Se precisar deixá-la rodar em segundo plano, use docker-compse up -d
Após a conclusão da construção, você pode usar dockers ps -a para visualizar nossa imagem
Em seguida, retorne ao console do Huawei Cloud, encontre o grupo de segurança e clique em Configurar regras
Adicione a porta configurada pelo nosso projeto para que possa ser acessada via IP
Teste, use o IP público para acessar nosso projeto e você poderá acessá-lo com sucesso.
Vamos testar nossa interface API novamente e enviar uma imagem, e o resultado do reconhecimento poderá ser retornado com sucesso!
Depois de executar o projeto por um dia, verifiquei o monitoramento do servidor e descobri que mesmo ao implantar aplicativos de alto desempenho, como grandes modelos de IA, o desempenho da instância L do Yunyao Cloud Server era excelente.