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

使用3080ti配置安装blip2

使用3080ti运行blip2的案例

  • 本机环境(==大家主要看GPU,ubuntu版本和cuda版本即可==):
  • 安装流程
  • 我最后安装的所有包的信息(python 3.9 )以供参考(environment.yml):

本机环境(大家主要看GPU,ubuntu版本和cuda版本即可):

(注意!我在运行blip2demo的时候显存用了80G以上,所以虽然这张卡能配好,但为了显存需要多卡运行!)

配置参考blip2的官方github网址。

PyTorch : 2.1.0 
ubuntu : 22.04
Python : 3.10
Cuda : 12.1
RTX : 3080 Ti(12GB) 
CPU : 12 vCPU Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz
内存 : 90GB

安装流程

在该环境中运行如下代码开始安装:

我发现当我使用python3.8(cuda11.3,cuda11.1)的时候运行不起来,所以这里换成了cuda12.1python3.9

conda create -n blip2 python=3.9
conda init bash && source /root/.bashrc
conda activate blip2

之后开始安装lavis

pip install salesforce-lavis

之后我发现,环境还缺少了相关的opencv-python包,所以又运行:

pip install opencv-python

好像网上也有帖子说要本地安装salesforce-lavis,但是我不用本地安装就能运行了,大家也可以参考一下他们的安装方法

接下来就可以运行如下的代码进行测试实验了

import torch
from PIL import Image
import requests
from lavis.models import load_model_and_preprocess# setup device to use
device = torch.device("cuda") if torch.cuda.is_available() else "cpu"
# load sample imageimg_url = 'https://storage.googleapis.com/sfr-vision-language-research/LAVIS/assets/merlion.png' 
raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')   
raw_image.show() #使用PIL来展示图片,原来的display函数应该是colab里的
#display(raw_image.resize((596, 437)))model, vis_processors, _ = load_model_and_preprocess(name="blip2_t5", model_type="pretrain_flant5xxl", is_eval=True, device=device
)#也可以用其他的模型
# Other available models:
# 
# model, vis_processors, _ = load_model_and_preprocess(
#     name="blip2_opt", model_type="pretrain_opt2.7b", is_eval=True, device=device
# )
# model, vis_processors, _ = load_model_and_preprocess(
#     name="blip2_opt", model_type="pretrain_opt6.7b", is_eval=True, device=device
# )
# model, vis_processors, _ = load_model_and_preprocess(
#     name="blip2_opt", model_type="caption_coco_opt2.7b", is_eval=True, device=device
# )
# model, vis_processors, _ = load_model_and_preprocess(
#     name="blip2_opt", model_type="caption_coco_opt6.7b", is_eval=True, device=device
# )
#
# model, vis_processors, _ = load_model_and_preprocess(
#     name="blip2_t5", model_type="pretrain_flant5xl", is_eval=True, device=device
# )
#
# model, vis_processors, _ = load_model_and_preprocess(
#     name="blip2_t5", model_type="caption_coco_flant5xl", is_eval=True, device=device
# )vis_processors.keys()

但是运行这个代码,会自动下载blip2t5文件,然后我们直接连接huggingface网站又有一些问题,下载速度非常慢,下载不下来。

因为下载太慢了,我们可以在Salesforce/blip2-flan-t5-xxl · Hugging Face Hugging Face上找到相关的文件并下载。

下载方法:本地下载huggingface模型并在服务器上使用流程

如果不做任何改动,本来默认的下载位置如下(可以从huggingface上手动下载我们需要的模型,之后上传到这个地址下):
**加粗样式**
但是有时候这个默认路径是在系统盘里,上传到这个系统盘里,系统盘内存容量会不够。所以我们继续探索,找一下如何放到别的盘里。

Huggingface 默认下载位置更改
添加一句export HF_HOME="/root/autodl-tmp/huggingface"
source ~/.bashrc 使配置生效。

因为觉得有点麻烦,我直接把环境变量在下面的代码里改了
我在目录autodl-tmp下创建两个目录:
/huggingface文件夹
/torch-model文件夹

import torch
from PIL import Image
import requests
from lavis.models import load_model_and_preprocess# setup device to use
device = torch.device("cuda") if torch.cuda.is_available() else "cpu"
# load sample imageimg_url = 'https://storage.googleapis.com/sfr-vision-language-research/LAVIS/assets/merlion.png' 
raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')   
raw_image.show() #使用PIL来展示图片,原来的display函数应该是colab里的
#display(raw_image.resize((596, 437)))import os
os.environ['TORCH_HOME']=r"/root/autodl-tmp/torch-model"  #更改pytorch断点的默认保存目录
os.environ['TRANSFORMERS_CACHE'] = r'/root/autodl-tmp/huggingface'    #更改huggingface 的默认保存目录model, vis_processors, _ = load_model_and_preprocess(name="blip2_t5", model_type="pretrain_flant5xxl", is_eval=True, device=device
)vis_processors.keys()# 引入环境变量之后,成功解决这个问题。

我最后安装的所有包的信息(python 3.9 )以供参考(environment.yml):

我的environment.yml文件内容

# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: linux-64
_libgcc_mutex=0.1=main
_openmp_mutex=5.1=1_gnu
altair=5.4.1=pypi_0
annotated-types=0.7.0=pypi_0
antlr4-python3-runtime=4.9.3=pypi_0
asttokens=2.4.1=pypi_0
attrs=24.2.0=pypi_0
bleach=6.1.0=pypi_0
blinker=1.8.2=pypi_0
blis=1.0.1=pypi_0
braceexpand=0.1.7=pypi_0
ca-certificates=2024.9.24=h06a4308_0
cachetools=5.5.0=pypi_0
catalogue=2.0.10=pypi_0
certifi=2024.8.30=pypi_0
cfgv=3.4.0=pypi_0
charset-normalizer=3.4.0=pypi_0
click=8.1.7=pypi_0
cloudpathlib=0.19.0=pypi_0
confection=0.1.5=pypi_0
contexttimer=0.3.3=pypi_0
contourpy=1.3.0=pypi_0
cycler=0.12.1=pypi_0
cymem=2.0.8=pypi_0
decorator=5.1.1=pypi_0
decord=0.6.0=pypi_0
distlib=0.3.9=pypi_0
einops=0.8.0=pypi_0
exceptiongroup=1.2.2=pypi_0
executing=2.1.0=pypi_0
fairscale=0.4.4=pypi_0
filelock=3.16.1=pypi_0
fonttools=4.54.1=pypi_0
fsspec=2024.9.0=pypi_0
ftfy=6.3.0=pypi_0
gitdb=4.0.11=pypi_0
gitpython=3.1.43=pypi_0
huggingface-hub=0.25.2=pypi_0
identify=2.6.1=pypi_0
idna=3.10=pypi_0
imageio=2.35.1=pypi_0
importlib-resources=6.4.5=pypi_0
iopath=0.1.10=pypi_0
ipython=8.18.1=pypi_0
jedi=0.19.1=pypi_0
jinja2=3.1.4=pypi_0
jsonschema=4.23.0=pypi_0
jsonschema-specifications=2024.10.1=pypi_0
kaggle=1.6.17=pypi_0
kiwisolver=1.4.7=pypi_0
langcodes=3.4.1=pypi_0
language-data=1.2.0=pypi_0
lazy-loader=0.4=pypi_0
ld_impl_linux-64=2.40=h12ee557_0
libffi=3.4.4=h6a678d5_1
libgcc-ng=11.2.0=h1234567_1
libgomp=11.2.0=h1234567_1
libstdcxx-ng=11.2.0=h1234567_1
marisa-trie=1.2.0=pypi_0
markdown-it-py=3.0.0=pypi_0
markupsafe=3.0.1=pypi_0
matplotlib=3.9.2=pypi_0
matplotlib-inline=0.1.7=pypi_0
mdurl=0.1.2=pypi_0
mpmath=1.3.0=pypi_0
murmurhash=1.0.10=pypi_0
narwhals=1.9.2=pypi_0
ncurses=6.4=h6a678d5_0
networkx=3.2.1=pypi_0
nodeenv=1.9.1=pypi_0
numpy=2.0.2=pypi_0
nvidia-cublas-cu12=12.1.3.1=pypi_0
nvidia-cuda-cupti-cu12=12.1.105=pypi_0
nvidia-cuda-nvrtc-cu12=12.1.105=pypi_0
nvidia-cuda-runtime-cu12=12.1.105=pypi_0
nvidia-cudnn-cu12=9.1.0.70=pypi_0
nvidia-cufft-cu12=11.0.2.54=pypi_0
nvidia-curand-cu12=10.3.2.106=pypi_0
nvidia-cusolver-cu12=11.4.5.107=pypi_0
nvidia-cusparse-cu12=12.1.0.106=pypi_0
nvidia-nccl-cu12=2.20.5=pypi_0
nvidia-nvjitlink-cu12=12.6.77=pypi_0
nvidia-nvtx-cu12=12.1.105=pypi_0
omegaconf=2.3.0=pypi_0
opencv-python=4.10.0.84=pypi_0
opencv-python-headless=4.5.5.64=pypi_0
opendatasets=0.1.22=pypi_0
openssl=3.0.15=h5eee18b_0
packaging=24.1=pypi_0
pandas=2.2.3=pypi_0
parso=0.8.4=pypi_0
pexpect=4.9.0=pypi_0
pillow=10.4.0=pypi_0
pip=24.2=py39h06a4308_0
platformdirs=4.3.6=pypi_0
plotly=5.24.1=pypi_0
portalocker=2.10.1=pypi_0
pre-commit=4.0.1=pypi_0
preshed=3.0.9=pypi_0
prompt-toolkit=3.0.48=pypi_0
protobuf=5.28.2=pypi_0
ptyprocess=0.7.0=pypi_0
pure-eval=0.2.3=pypi_0
pyarrow=17.0.0=pypi_0
pycocoevalcap=1.2=pypi_0
pycocotools=2.0.8=pypi_0
pydantic=2.9.2=pypi_0
pydantic-core=2.23.4=pypi_0
pydeck=0.9.1=pypi_0
pygments=2.18.0=pypi_0
pyparsing=3.1.4=pypi_0
python=3.9.20=he870216_1
python-dateutil=2.9.0.post0=pypi_0
python-magic=0.4.27=pypi_0
python-slugify=8.0.4=pypi_0
pytz=2024.2=pypi_0
pyyaml=6.0.2=pypi_0
readline=8.2=h5eee18b_0
referencing=0.35.1=pypi_0
regex=2024.9.11=pypi_0
requests=2.32.3=pypi_0
rich=13.9.2=pypi_0
rpds-py=0.20.0=pypi_0
salesforce-lavis=1.0.2=pypi_0
scikit-image=0.24.0=pypi_0
scipy=1.13.1=pypi_0
sentencepiece=0.2.0=pypi_0
setuptools=75.1.0=py39h06a4308_0
shellingham=1.5.4=pypi_0
six=1.16.0=pypi_0
smart-open=7.0.5=pypi_0
smmap=5.0.1=pypi_0
spacy=3.8.2=pypi_0
spacy-legacy=3.0.12=pypi_0
spacy-loggers=1.0.5=pypi_0
sqlite=3.45.3=h5eee18b_0
srsly=2.4.8=pypi_0
stack-data=0.6.3=pypi_0
streamlit=1.39.0=pypi_0
sympy=1.13.3=pypi_0
tenacity=9.0.0=pypi_0
text-unidecode=1.3=pypi_0
thinc=8.3.2=pypi_0
tifffile=2024.8.30=pypi_0
timm=0.4.12=pypi_0
tk=8.6.14=h39e8969_0
tokenizers=0.13.3=pypi_0
toml=0.10.2=pypi_0
torch=2.4.1=pypi_0
torchvision=0.19.1=pypi_0
tornado=6.4.1=pypi_0
tqdm=4.66.5=pypi_0
traitlets=5.14.3=pypi_0
transformers=4.26.1=pypi_0
triton=3.0.0=pypi_0
typer=0.12.5=pypi_0
typing-extensions=4.12.2=pypi_0
tzdata=2024.2=pypi_0
urllib3=2.2.3=pypi_0
virtualenv=20.26.6=pypi_0
wasabi=1.1.3=pypi_0
watchdog=5.0.3=pypi_0
wcwidth=0.2.13=pypi_0
weasel=0.4.1=pypi_0
webdataset=0.2.100=pypi_0
webencodings=0.5.1=pypi_0
wheel=0.44.0=py39h06a4308_0
wrapt=1.16.0=pypi_0
xz=5.4.6=h5eee18b_1
zipp=3.20.2=pypi_0
zlib=1.2.13=h5eee18b_1

相关文章:

使用3080ti配置安装blip2

使用3080ti运行blip2的案例 本机环境&#xff08;大家主要看GPU&#xff0c;ubuntu版本和cuda版本即可&#xff09;&#xff1a;安装流程我最后安装的所有包的信息&#xff08;python 3.9 &#xff09;以供参考&#xff08;environment.yml&#xff09;&#xff1a; 本机环境&a…...

vue3组件通信之defineEmits

一、defineEmits是什么&#xff1f; defineEmits 是vue3提供的方法&#xff0c;又称为自定义事件&#xff0c;不需要引入可以直接使用&#xff0c;用于子组件与父组件通信。 二、使用样例 1.父组件代码 代码如下&#xff08;示例&#xff09;&#xff1a; <template>…...

rust gio-rs 挂载 samba 磁盘

linux 使用的 gio 管理工具 这个工具如下 这是 gio 的rust版本 https://crates.io/crates/gio 可以用 rust 语言实现下面所有操作 gio mout 挂载 samba 如下 //https://valadoc.org/gio-2.0/GLib.MountOperation.html pub async fn gio_mount(uri路径:&str, 用户名:Opti…...

幸存者游戏(类)

#include <iostream> #include <graphics.h> #include <stdio.h> #include <conio.h> #include <vector> #include <string> using namespace std; int idx_player_anim 0; const int player_anim_num 6;//这里要把动画帧数定位const i…...

SQL 中UPDATE 和 DELETE 语句的深入理解与应用

在 SQL 中&#xff0c;UPDATE和DELETE语句是用于操作表数据的重要工具&#xff0c;它们允许我们对已存在的数据进行修改和删除。 一、UPDATE 语句 &#xff08;一&#xff09;基本语法 UPDATE语句的基本语法如下&#xff1a; UPDATE table_name SET column1 value1, colum…...

在 Windows 上查找和结束占用特定端口占用程序,并杀死

在 Windows 上查找和结束占用特定端口&#xff08;如 9003&#xff09;的程序&#xff0c;你可以使用以下步骤&#xff1a; 步骤 1&#xff1a;找到占用端口的进程 ID (PID) 打开命令提示符&#xff08;按 Win R&#xff0c;输入 cmd&#xff0c;然后按回车&#xff09;。输…...

sql server尽量避免滥用影响性能的标量函数

相信很多新手学了 函数的用法就不可避免的想把学到的东西用起来&#xff0c;然而这个函数使用却有坑&#xff0c; 在实际用的时候我发现一个简单的计算封装 &#xff0c;不用函数和用函数执行耗时差太多了。 能避免列上进行函数则尽量避免&#xff0c;这是在实际上遇到的坑 &am…...

python画图|二维动态柱状图输出

【1】引言 在前面的学习过程中&#xff0c;已经探索过二维柱状图和三维柱状图的绘制教程&#xff0c;包括且不限于的文章链接有&#xff1a; python画图|水平直方图绘制_绘制水平直方图-CSDN博客 python画图|3D bar进阶探索_ax.bar3d-CSDN博客 此外也学习了动态的直线输出和…...

CocosCreator 快速部署 TON 游戏:Web2 游戏如何使用 Ton支付

在本篇文章中&#xff0c;我们将继续探讨如何使用 Cocos Creator 开发 Telegram 游戏&#xff0c;重点介绍如何集成 TON 支付功能。通过这一教程&#xff0c;开发者将学会如何在游戏中接入 TON Connect&#xff0c;实现钱包连接、支付以及支付后的校验流程&#xff0c;最终为 W…...

生信初学者教程(二十八):单细胞数据标准化

文章目录 介绍加载R包导入数据消除测序深度影响评估细胞周期的影响识别高度可变的特征缩放数据降维聚类输出结果总结介绍 scRNA-seq的标准化是一个重要的预处理步骤,目的是消除技术变异(比如比如测序深度和基因长度等因素),使基因表达和/或样本之间的比较更加可靠。标准化方…...

【OceanBase诊断调优】—— 错误码 5065 和 5066 的区别

适用版本&#xff1a;V2.1.x、V2.2.x、V3.1.x、V3.2.x 5065 与 5066 是两个近似的报错。 OB_ERR_QUERY_INTERRUPTED(-5065): Message: Query execution was interrupted。 含义为执行中断, 例如终端执行 SQL 过程中按 ctrlc 终止 SQL 执行会报 -5065。 OB_ERR_SESSION_INTER…...

Spring Boot RESTful API开发教程

一、RESTful API简介 RESTful API是一种基于HTTP协议的Web API&#xff0c;其设计原则是简单、可扩展、轻量级、可缓存、可靠、可读性强。RESTful API通常使用HTTP请求方法&#xff08;GET、POST、PUT、DELETE等&#xff09;来操作资源&#xff0c;使用HTTP状态码来表示操作结…...

<Rust>iced库(0.13.1)学习之番外:如何为窗口添加初始值?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 注:新版本已更新为0.13 概述 这是本专栏的番外篇,主要介绍一下新…...

Redis:list类型

Redis&#xff1a;list类型 list命令非阻塞LPUSHLRANGELPUSHXRPUSHRPUSHXLPOPRPOPLINDEXLINSERTLLENLREMLTRIMLSET 阻塞BLPOPBRPOP 内部编码ziplistlinkedlistquicklist 几乎每种语言都有顺序表、数组、链表这样的顺序结构&#xff0c;Redis也做出了相应的支持。 如图&#xff…...

政府采购方式有哪些,竞争性谈判和竞争性磋商的区别

政府采购的方式主要包括公开招标、邀请招标、竞争性谈判、竞争性磋商、询价、单一来源采购和框架协议采购等几种。以下是对这些方式的具体介绍&#xff1a; 公开招标 定义&#xff1a;公开招标是指采购单位依法以招标公告的方式邀请不特定的供应商参与投标的采购方式。适用情形…...

【JavaScript】移动色块案例 实现一个可以拖动并且在拖动过程中会自动改变颜色的色块(JS 事件监听器)

移动色块案例 实现一个可以拖动并且在拖动过程中会自动改变颜色的色块。 移动色块&#xff1a;用户可以通过鼠标按住并拖动页面上的红色方块&#xff08;#blocks&#xff09;。当用户按下鼠标左键时&#xff0c;色块开始跟随鼠标的移动而移动&#xff1b;当用户释放鼠标左键时…...

[Linux#62][TCP] 首位长度:封装与分用 | 序号:可靠性原理 | 滑动窗口:流量控制

目录 一. 认识TCP协议的报头 1.TCP头部格式 2. TCP协议的特点 二. TCP如何封装与分用 TCP 报文封装与解包 如何封装解包&#xff0c;如何分用 分离有效载荷 隐含问题&#xff1a;TCP 与 UDP 报头的区别 封装和解包的逆向过程 如何分用 TCP 报文 如何通过端口号找到绑…...

【中短文】区分神经网络中 表征特征、潜层特征、低秩 概念

1. 表征特征&#xff08;Representational Feature&#xff09;&#xff1a; 表征特征通常指的是输入数据经过NN处理就得到的中间表示或输出表示。 这些特征由NN经学习过程自动提取&#xff0c;能更好捕捉输入数据的本质属性。 例如&#xff1a;在图像识别任务中&…...

MySQL8.0环境部署+Navicat17激活教程

安装MySQL 下载MySQL MySQL官网下载当前最新版本&#xff0c;当前是8.0.39。 选择No thanks, just start my download等待下载即可。 安装MySQL 下载完成后&#xff0c;双击安装进入安装引导页面。选择Custom自定义安装。 选择MySQL Server 8.0.39 - X64安装。 点击Execute执…...

每日读则推(十)——Elon Musk‘s speech on self-driving at Tesla‘s annual meeting

Elon Musk: You cant solve self-driving unless you have millions of cars on the road. n.自动驾驶 v.限制,约束,强迫,迫使“We are no longer compute-constrained for training. 不再 n/v.估算,计…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...

LeetCode 0386.字典序排数:细心总结条件

【LetMeFly】386.字典序排数&#xff1a;细心总结条件 力扣题目链接&#xff1a;https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n &#xff0c;按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...

7种分类数据编码技术详解:从原理到实战

在数据分析和机器学习领域&#xff0c;分类数据&#xff08;Categorical Data&#xff09;的处理是一个基础但至关重要的环节。分类数据指的是由有限数量的离散值组成的数据类型&#xff0c;如性别&#xff08;男/女&#xff09;、颜色&#xff08;红/绿/蓝&#xff09;或产品类…...

安宝特方案丨从依赖经验到数据驱动:AR套件重构特种装备装配与质检全流程

在高压电气装备、军工装备、石油测井仪器装备、计算存储服务器和机柜、核磁医疗装备、大型发动机组等特种装备生产型企业&#xff0c;其产品具有“小批量、多品种、人工装配、价值高”的特点。 生产管理中存在传统SOP文件内容缺失、SOP更新不及、装配严重依赖个人经验、产品装…...