当前位置: 首页 > news >正文

【深度学习】clip-interrogator clip docker 容器启动过程

文章目录

  • dockerfile备忘
  • ENTRYPOINT ["bash", "/app/startProject.sh"]
  • 常用docker指令
  • web服务脚本
  • 访问接口
  • 文件

给一张图片,输出图片描述。

dockerfile备忘

只有从dockerfile制作的镜像才有分层结构,加速传输,故第一步需要编写dockerfile,过程是不断调试的,下面是一些制作过程中写的dockerfile片段,可以参考一下语句和写法:

FROM nvidia/cuda:11.6.2-cudnn8-devel-ubuntu18.04
RUN apt-get update && apt-get install -y wget git
RUN wget http://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/conda.sh && \bash /tmp/conda.sh -b && rm /tmp/conda.sh
COPY ./deps/ /deps
RUN cp /deps/.condarc /root/
ENV DEBIAN_FRONTEND=noninteractive
# 安装 tzdata 包并设置时区为上海(无交互)
RUN apt-get update && \apt-get install -y tzdata && \ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \echo "Asia/Shanghai" > /etc/timezone
RUN apt-get install -y curl
RUN ~/miniconda3/bin/conda init bash && . ~/.bashrc
RUN . ~/.bashrc && curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh |  bash && \apt-get install -y git-lfs && git-lfs install
RUN apt-get install -y python3-pip
# 打印~/.bashrc
RUN . ~/.bashrc && pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN . ~/.bashrc && git clone --recurse-submodules https://github.com/lkwq007/stablediffusion-infinity && \cd stablediffusion-infinity &&  ~/miniconda3/bin/conda env create -f environment.yml
#RUN . ~/.bashrc && ~/miniconda3/bin/conda activate sd-inf && \
#    ~/miniconda3/bin/conda install -c conda-forge -y diffusers transformers ftfy accelerate && \
#    ~/miniconda3/bin/conda update -c conda-forge -y diffusers transformers ftfy accelerate && \
#    pip install -U gradioFROM kevinchina/deeplearning:sd_base_cuda116
RUN . ~/.bashrc && conda activate sd-inf && pip install  clip-interrogator==0.6.0  && pip install fastapi uvicorn python-multipart requests opencv-python numpy
RUN . ~/.bashrc && conda activate sd-inf && cd /deps/ && python t.pyFROM kevinchina/deeplearning:sd_base_cuda116clip
RUN . ~/.bashrc && mkdir /app/ && apt-get install -y libopencv-dev
COPY ./deps/main_clip.py /app/FROM kevinchina/deeplearning:sd_base_cuda116clip1
RUN . ~/.bashrc && echo "conda activate sd-inf" >>~/.bashrc
RUN . ~/.bashrc && pip uninstall clip-interrogator -y
RUN . ~/.bashrc && git clone https://github.com/xddun/clip-interrogator.gitFROM kevinchina/deeplearning:sd_base_cuda116clip4
WORKDIR /app
RUN rm /app/main_clip.py
COPY ./deps/main_clip.py /app/
COPY ./deps/startProject.sh /app/
EXPOSE 8001
ENTRYPOINT ["bash", "/app/startProject.sh"]

比较重要的是最后一个dockerfile,可以通过kevinchina/deeplearning:sd_base_cuda116clip4作为基础镜像。

FROM kevinchina/deeplearning:sd_base_cuda116clip4
WORKDIR /app
RUN rm /app/main_clip.py
COPY ./deps/main_clip.py /app/
COPY ./deps/startProject.sh /app/
EXPOSE 8001
ENTRYPOINT ["bash", "/app/startProject.sh"]

ENTRYPOINT [“bash”, “/app/startProject.sh”]

启动web服务的脚本:

#!/bin/bash
set -u
cd /app/ && nohup /root/miniconda3/envs/sd-inf/bin/python main_clip.py >/log.alg  2>&1 &
echo "----------------------------------------"
echo "running..."
while [ 1 ]
doecho "sleep"sleep 3600
done

常用docker指令

安装docker nvidia支持(确认有docker后):

# 1、添加源
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
sudo curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
sudo curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# 2、安装并重启
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

给docker image命名:

docker tag e225437cc81a kevinchina/deeplearning:sd_base_cuda116clip7

在docker build的时候直接给名字(那个点是宿主机当前目录):

docker build -f Dockerfile -t kevinchina/deeplearning:sd_base_cuda116clip7 .

在后台直接执行docker web服务(因为dockerfile里有ENTRYPOINT [“bash”, “/app/startProject.sh”]):

docker run -d --gpus all -p 8001:8001  kevinchina/deeplearning:sd_base_cuda116clip7

以交互形态进入刚才启动的容器:

docker ps # 查看容器hash id,不是镜像hash id
docker exec -it 4209c872c48b bash # 进入后可以去查看日志/log.alg

向docker center推送镜像:

docker push kevinchina/deeplearning:sd_base_cuda116clip7

web服务脚本

# -*- coding:utf-8 -*-
import traceback
from typing import List, Optional, Union
import uvicorn
from fastapi.middleware.cors import CORSMiddleware
from fastapi import FastAPI, File, Form, UploadFile
import cv2
import numpy as np
from PIL import Image
from clip_interrogator import Config, Interrogatorci = Interrogator(Config(clip_model_name="ViT-L-14/openai"))app = FastAPI(title='FastAPI Tutorial',description='FastAPI教程',version='1.0.0',docs_url='/docs',redoc_url='/redocs',
)
app.add_middleware(CORSMiddleware,allow_origins=["*"],allow_credentials=True,allow_methods=["*"],allow_headers=["*"],
)@app.post("/files/")
async def alg_file(fileb: UploadFile = File(...)
):try:img = cv2.imdecode(np.fromstring(fileb.file.read(), np.uint8), cv2.IMREAD_COLOR)pil_image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))return ci.interrogate(pil_image)except:traceback.print_exc()return "-1"if __name__ == '__main__':uvicorn.run('main_clip:app', host='0.0.0.0', port=8001, reload=False, workers=1)

访问接口

容器启动是需要加载模型的,故需要访问要等1分钟后,比较稳定。

import requests
url = "http://0.0.0.0:8001/files/"
with open("1.png", "rb") as f:res = requests.post(url=url, files={"fileb": f}, timeout=None)print(res.json())

访问成功:

root@euler-MS-7D30:/home/xiedong/project_docker/deps# python3 req.py
arafed kingfisher with open beak and long bill, featured on unsplash, screaming face, colorised, sauron, with a very large mouth, that has the form of a dragonfly, perfect face template, kenku, visibly angry, closeup of the face, sneer, devouring

在这里插入图片描述

文件

可以这里下载docker的一些文件:
https://download.csdn.net/download/x1131230123/88359051

相关文章:

【深度学习】clip-interrogator clip docker 容器启动过程

文章目录 dockerfile备忘ENTRYPOINT ["bash", "/app/startProject.sh"]常用docker指令web服务脚本访问接口文件 给一张图片,输出图片描述。 dockerfile备忘 只有从dockerfile制作的镜像才有分层结构,加速传输,故第一步…...

Linux设备驱动之gpio-keys

Linux设备驱动之gpio-keys 前两个章节介绍了Linux字符设备和platform设备的注册,他们都是比较基础的,让大家理解Linux内核的设备驱动是如何注册、使用的。但在工作中,个人认为完全手写一个字符设备驱动的机会比较少,更多的都是基…...

【vue3页面展示代码】展示代码codemirror插件

技术版本: vue 3.2.40、codemirror 6.0.1、less 4.1.3、vue-codemirror 6.1.1、 codemirror/lang-vue 0.1.2、codemirror/theme-one-dark 6.1.2 效果图: 1.安装插件 yarn add codemirror vue-codemirror codemirror/lang-vue codemirror/theme-one-dar…...

【面试必刷TOP101】链表相加 单链表的排序

目录 题目:链表相加(二)_牛客题霸_牛客网 (nowcoder.com) 题目的接口: 解题思路: 代码: 过啦!!! 题目:单链表的排序_牛客题霸_牛客网 (nowcoder.com) 题目的接口:…...

Visual Studio复制、拷贝C++项目与第三方库配置信息到新的项目中

本文介绍在Visual Studio软件中,复制一个已有的、配置过多种第三方库的C项目,将其拷贝为一个新的项目,同时使得新项目可以直接使用原有项目中配置好的各类**C**配置、第三方库等的方法。 在撰写C 代码时,如果需要用到他人撰写的第…...

rust迭代器

迭代器用来遍历容器。 迭代器就是把容器中的所有元素按照顺序一个接一个的传递给处理逻辑。 Rust中的迭代器 标准库中定义了Iterator特性 trait Iterator {type Item;fn next(&mut self) -> Option<Self::Item>; }实现了Iterator特性的结构体就是迭代器。 很多类…...

软件定制开发的优势与步骤|APP搭建|小程序

软件定制开发的优势与步骤|APP搭建|小程序 定制开发的优势&#xff1a; 1. 满足特定需求&#xff1a;定制开发可以根据客户的实际需求进行设计和开发&#xff0c;使得软件系统能够更好地满足客户的业务目标。 2. 优化用户体验&#xff1a;通过深入了解客户的需求&#xff0c;定…...

ERR_CONNECTION_REFUSED等非标准的HTTP错误状态码原因分析和解决办法

文章目录 一、DNS Resolution Failed1&#xff0c;DNS服务器故障2&#xff0c;DNS配置错误3&#xff0c;DNS劫持4&#xff0c;域名过期-5&#xff0c;其他网络问题 二、ERR_CONNECTION_REFUSED-"ERR_CONNECTION_REFUSED" 错误可能有多种原因 三、ERR_SSL_PROTOCOL_ER…...

瀑布流 - Vue3基于Grid布局简单实现一个瀑布流组件

瀑布流 - Vue3基于Grid布局简单实现一个瀑布流组件 前言 在学习Grid布局之时&#xff0c;我发现其是CSS中的一种强大的布局方案&#xff0c;它将网页划分成一个个网格&#xff0c;可以任意组合不同的网格&#xff0c;做出各种各样的布局&#xff0c;在刷某书和某宝首页时&…...

ES6面试题总结

1. 谈谈你对 ES6 的理解,为什么要学习es6? ES6是新一代的JS语言标准&#xff0c;对分JS语言核心内容做了升级优化&#xff0c;规范了JS使用标准&#xff0c;新增了JS原生方法&#xff0c;使得JS使用更加规范&#xff0c;更加优雅&#xff0c;更适合大型应用的开发。学习ES6是成…...

mybatisplus,jdbc 批量插入

1.测试用例 项目中遇到在做导入号码的时候我们会用到批量导入&#xff0c;提高入库的速度。接下来我们以10000条为测试用例。 1.1 批量执行sql语句 当需要成批插入或者更新记录时&#xff0c;可以采用Java的批量更新机制&#xff0c;这一机制允许多条语句一次性提交给数据库…...

如何使用IP归属地查询API来追踪网络活动

引言 在当今数字化世界中&#xff0c;了解网络活动的源头和位置对于网络安全、市场研究和用户体验至关重要。IP归属地查询API是一种强大的工具&#xff0c;可以帮助您追踪网络活动并获取有关IP地址的重要信息。本文将探讨如何使用IP归属地查询API来追踪网络活动&#xff0c;以…...

【SQL】S0 系列博文大纲

系列博文大纲 SQL 学习环境建议系列博文相关书籍系列博文大纲阶段进展 SQL 学习环境建议 对于 SQL 语言的学习&#xff0c;博主本地使用&#xff1a;MySQL DataGrip&#xff1b; MySQL 提供本地数据库服务&#xff1b; DataGrip IDE&#xff0c;承担编程运行测试任务&#xf…...

2023年8月体育用品行业数据分析(京东数据产品)

当前&#xff0c;亚运会临近&#xff0c;这也带动了国民对体育消费的热情&#xff0c;体育产品内销逐渐旺盛&#xff0c;“亚运经济”红利开始显现。鲸参谋数据显示&#xff0c;今年8月份&#xff0c;京东平台上体育用品行业的销量为185万&#xff0c;同比增长2%&#xff1b;销…...

国内高校镜像网站

国内各大高校开源镜像站 排名不分前后 清华大学&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/ 北京大学&#xff1a;https://mirrors.pku.edu.cn/ 北京外国语大学&#xff1a;http://​ https://mirrors.bfsu.edu.cn/ ​ 北京理工大学&#xff1a;https://mirrors.bit.e…...

Linux安装kafka-manager

相关链接https://github.com/yahoo/kafka-manager/releases kafka-manager-2.0.0.2下载地址 百度云链接&#xff1a;https://pan.baidu.com/s/1XinGcwpXU9YBF46qkrKS_A 提取码&#xff1a;tzvg 一、安装部署 1.把kafka-manager-2.0.0.2.zip拷贝到目录 /opt/app/elk 2.解压…...

MYSQL索引——B+树讲解

B-/B树看 MySQL索引结构 B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树.它类似普通的平衡二叉树&#xff0c;不同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图. B-树有如下特点: 所有键值分布在整颗树中&#xff1b; 任何一…...

VB将十进制整数转换成16进制以内的任意进制数

VB将十进制整数转换成16进制以内的任意进制数 数值转换&#xff0c;能够将十进制整数转换成16进制以内的任意进制数 Private Function DecToN(ByVal x%, ByVal n%) As StringDim p() As String, y$, r%p Split("0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F", ",")I…...

基于SpringBoot+Vue的宠物领养饲养交流管理平台设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…...

【图像去噪】【TGV 正则器的快速计算方法】通过FFT的总(广义)变化进行图像去噪(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

零代码基础也能用:万物识别-中文-通用领域镜像一键部署教程

零代码基础也能用&#xff1a;万物识别-中文-通用领域镜像一键部署教程 1. 开箱即用的图片识别神器 想象一下这样的场景&#xff1a;你刚拍了一张照片&#xff0c;还没来得及细看&#xff0c;AI就已经告诉你画面里有什么——这不是科幻电影&#xff0c;而是"万物识别-中…...

Harmonyos应用实例214:空间角与距离计算器

6. 空间角与距离计算器 功能简介:利用空间向量计算异面直线所成角、直线与平面所成角、二面角,以及点到平面的距离。通过输入向量坐标,实时计算并展示结果,帮助学生掌握空间角与距离的向量计算方法。 ArkTS代码: @Entry @Component struct SpaceVectorCalculator {@Stat…...

YOLOE零样本迁移实战案例:从LVIS预训练模型快速适配安防监控场景

YOLOE零样本迁移实战案例&#xff1a;从LVIS预训练模型快速适配安防监控场景 1. 引言&#xff1a;当通用模型遇见专业场景 想象一下&#xff0c;你手里有一个能识别上千种物体的“全能”AI模型&#xff0c;现在需要它去盯监控&#xff0c;专门找“可疑人员”、“遗留包裹”和…...

保姆级教程:在QT中配置qcustomplot实现热力图(含常见问题解决方案)

QT中qcustomplot热力图实战&#xff1a;从配置到交互优化的完整指南 第一次在QT项目中尝试用qcustomplot绘制热力图时&#xff0c;我被数据映射和实时刷新的问题困扰了整整两天。直到凌晨三点调试通过的那一刻&#xff0c;才真正理解这个强大可视化工具的精妙之处。本文将分享那…...

OpenClaw智能剪贴板:GLM-4.7-Flash增强复制粘贴功能

OpenClaw智能剪贴板&#xff1a;GLM-4.7-Flash增强复制粘贴功能 1. 为什么我们需要更聪明的剪贴板 作为一个每天要和大量文本打交道的技术写作者&#xff0c;我经常陷入这样的困境&#xff1a;从网页复制的内容带着乱七八糟的格式&#xff0c;从PDF摘录的段落夹杂着换行符和乱…...

零基础入门:5分钟学会用Ollama运行Granite-4.0-H-350M文本生成

零基础入门&#xff1a;5分钟学会用Ollama运行Granite-4.0-H-350M文本生成 1. 为什么选择Granite-4.0-H-350M Granite-4.0-H-350M是一个轻量级但功能强大的文本生成模型&#xff0c;特别适合初学者和资源有限的用户。它只有3.5亿参数&#xff0c;却能在普通电脑上流畅运行&am…...

家庭实验室:树莓派控制OpenClaw调用远程Qwen3-32B

家庭实验室&#xff1a;树莓派控制OpenClaw调用远程Qwen3-32B 1. 为什么选择树莓派OpenClaw组合 去年冬天&#xff0c;我在整理家庭实验室设备时发现一个闲置的树莓派4B。这台信用卡大小的电脑曾经用来跑Home Assistant控制智能家居&#xff0c;但后来换了NUC主机就被束之高阁…...

提升开放平台开发效率,快马AI工具链自动化集成与测试

在企业级开放平台的开发过程中&#xff0c;效率往往是决定项目成败的关键因素之一。传统的开发流程中&#xff0c;开发者需要花费大量时间在重复性工作上&#xff0c;比如编写API客户端代码、配置测试环境、维护文档等。这些工作不仅耗时&#xff0c;还容易出错。今天我想分享一…...

Oracle数据库架构入门概述

本文分为四个部分简单概述 一、入门概述 二、数据库实例简述 三、数据库物理存储和逻辑存储结构简述 四、网络体系结构概述 入门概述 Oracle 数据库服务器包括一个数据库和至少一个数据库实例 &#xff08;通常是指只有一个实例&#xff09;。 因为实例和数据库关联紧密&#x…...

用Python代码和蒙特卡洛方法,手把手教你估算强化学习中的状态价值(附完整代码)

用Python实现蒙特卡洛方法估算强化学习状态价值的实战指南 马尔可夫决策过程&#xff08;MDP&#xff09;是强化学习的数学基础框架&#xff0c;而状态价值函数则是评估策略优劣的核心指标。许多初学者在理解抽象的状态价值概念时会遇到困难——这些数字究竟是如何从实际交互中…...