写在前面
这里需要指出,论文原作者并未使用Anaconda创建虚拟环境运行代码,而我复现论文时使用的是Anaconda所创建的虚拟环境,因此本文适用于通过Anaconda使用论文代码的需求,使用其他途径或手段的本文仅供参考。
引言
cliport论文由于作者发布日期与我复现论文的时间相隔了几年,因此所提供的代码中有关更新第三方软件库等命令运行后会使得我们实际上得到的第三方库版本比论文作者的高,因此在配置环境的过程中需要考虑到作者的创作背景,尽量使用论文作者所处时期对应的第三方库的版本,因此安装第三方库时推荐指定具体的版本号进行下载安装,以避免依赖冲突的问题。本文在“问题记录”中记录了一些配置环境时会遇到的问题,并将解决办法附于描述之下。
下载Cliport项目文件:
git clone https://github.com/cliport/cliport.git
注:如果该代码运行后下载速度过慢,有两种解决方法:
1.(能打开cliport对应的github网页的):
- 点击“code”;再点击“download ZIP”;
- 下载完成后将cliport-main.zip文件解压到路径尽量简单并且有足够空间的位置;
- 最后将cliport-main文件夹的名字重命名为你喜欢的名字即可(比如cliport),当然也可以不改,只是我个人看着xxx-main的命名方式觉得别扭,非得把“main”给去了不可。
2.(有VPN的):首先说明一下,能打开cliport对应的github网页是第1种方法的前提,但是能打开下载ZIP也不一定快,只不过有些情况下会比直接在终端里执行上述代码的下载速度要快。
- 第2种方法是直接开VPN执行上述代码,或者开VPN后执行第1种方法。
注意:下载好的项目包中有一个requirement.txt文件,这个文件是提供给你论文作者代码环境中各第三方库的版本的,但是里面有关torch、torchvision以及torch_lightning的版本是按照论文作者的cuda版本设置的,我们自己的电脑显卡类型都不太一样,因此安装的cuda版本也会有所不同,所以在运行“pip install -r requirements.txt”这个代码前需要提前把上述三个库的版本改成适用于你电脑上cuda所对应的版本,具体版本请自行查阅,这里不多赘述。
创建虚拟环境:
conda create -n <此处填:自定义的虚拟环境名称>*(如:cliport)* python=3.8
激活虚拟环境:
Win系统(在终端执行):
activate <此处填:自定义的虚拟环境名称>*(如:cliport)*
Ubuntu系统(在终端执行):
conda activate <此处填:自定义的虚拟环境名称>*(如:cliport)*
进入到项目文件夹中:
cd <此处填:解压完cliport.zip后,生成的文件夹的下一级目录的路径>
安装各依赖第三方库:
pip install -r requirements.txt *(可加镜像源:-i https://pypi.tuna.tsinghua.edu.cn/simple)*
添加项目文件根目录路径:(这一步每次重启终端后都要运行,如果嫌这样太麻烦,Ubuntu系统的使用者可以将这条命令写入~/.bashrc中,如此每次重启终端后将自动执行该命令,而不需我们再手动输入)
export CLIPORT_ROOT=$(pwd)
之后的命令每一步都可能会报错,因此直接参看下面的问题记录,找到你该运行的代码,如遇问题运行How to solve中的代码即可。
问题记录
Question 1:pip install requirements.txt时,即使使用镜像源仍然大片飘红。
Reason: 这个问题的原因在于,pip的版本太高了,里面已经淘汰了一些过老的库,因此需要将pip的版本降下去,否则无法提供所需版本的第三方库。
How to solve:
pip install pip==24.0
Question 2:python setup.py develop报如下错误:
********************************************************************************
Please avoid running ``setup.py`` and ``easy_install``.
Instead, use pypa/build, pypa/installer or other
standards-based tools.
See https://github.com/pypa/setuptools/issues/917 for details.
********************************************************************************
Reason: 这个问题产生的原因是setuptools的版本太高了,这里把版本降一下再运行python setup.py develop就好了,但是再往后的代码会重新因为setuptools版本太低而报错,到时候再升上去。
How to solve:
pip install setuptools==41.0.0
Question 3:运行下列代码时报错:
python cliport/demos.py n=10 \
task=stack-block-pyramid-seq-seen-colors \
mode=test
Reason: 上述代码运行失败无外乎有四种原因,下面一一进行描述。(注:建议在执行上述代码前提前将解决下列4个问题的代码运行一遍)
Subquestion1:报如下错误:
ModuleNotFoundError: No module named '_distutils_hack'。
Reason:这个问题就是前文提到的setuptools版本太低了,要在此处升上去。
How to solve:
pip install --upgrade setuptools
Subquestion2:报如下错误:
TypeError: Descriptors cannot be created directly.。
Reason:这个问题产生的原因是protobuf版本太高了,要降下来。
How to solve:(此处是通过linux命令行从清华源下载指定版本的protobuf,如果从pip下载第三方库时太慢,可以通过“pip install <此处填要下载的包名>(版本号有需要就在包名后用'=='+‘版本号’)-i <国内镜像源网址>”)
pip install protobuf==3.19.6 -i https://pypi.tuna.tsinghua.edu.cn/simple
Subquestion3:报如下错误:
AttributeError: module 'numpy' has no attribute 'float'。
Reason:这个问题是因为numpy在1.24版本后将np.float的书写格式改为了float64,所以为了仍使用‘float’的格式,需要保证numpy的版本在1.24以前,即numpy<1.24。
How to solve:
pip install numpy==1.23.5
Subquestion4:报如下错误:
packaging.version.InvalidVersion: Invalid version: '0.10.1,<0.11'。
Reason:这个问题也是packaging的版本太高导致的,因此解决办法还是降低第三方库的版本。
How to solve:
pip install packaging==21.3 -i https://pypi.tuna.tsinghua.edu.cn/simple/
Question 4:运行下述代码后,可视化界面中没有任何动态显示,停顿了5s左右就自己关闭了,同时终端显示内部进程退出(Internal exited)。
python cliport/demos.py n=10 \
task=stack-block-pyramid-seq-seen-colors \
mode=test
显示:
/home/sun/anaconda3/envs/cliport/lib/python3.8/site-packages/hydra/plugins/config_source.py:190: UserWarning:
Missing @package directive config.yaml in file:///home/sun/cliport/cliport/cfg.
See https://hydra.cc/docs/next/upgrades/0.11_to_1.0/adding_a_package_directive
warnings.warn(message=msg, category=UserWarning)
text argument:/home/sun/cliport/cliport/environments/assets/
Saving to: /home/sun/cliport/data/stack-block-pyramid-seq-seen-colors-test
Mode: test
Reason: 需要注意这只是一个警告,而不是错误,因此这个问题到底是否真的是个问题需要你继续执行下述代码:
python cliport/eval.py model_task=multi-language-conditioned \
eval_task=stack-block-pyramid-seq-seen-colors \
agent=cliport \
mode=test \
n_demos=10 \
train_demos=1000 \
exp_folder=cliport_quickstart \
checkpoint_type=test_best \
update_results=True \
disp=True
若执行该代码后仍然出现可视化界面不显示,同时几秒钟后自己关闭的情况,那么确实有错误,并且此时错误会显示到终端上。并且大概率是显卡和cuda版本不匹配,或者cuda跟pytorch的版本不匹配的问题。
1.我的显卡最高能下12.2版本的cuda,但是我下了11.0的(为了跟论文作者requirement.txt中pytorch、torchvision和torch_lightning版本相对应),结果会提示我的显卡有最低算力要求,所以我需要提高我的cuda版本。解决办法就是安装更新的cuda。
2.我的cuda版本和我安装的pytorch、torchvision和torch_lightning中的一个或多个库版本不匹配,因此需要检查一下版本对应关系,将安错版本的库指定正确的版本重新安装。