From b6248f1e77240a0fa2ad954d9080b4dee5d7efc1 Mon Sep 17 00:00:00 2001 From: zmf <2533736852@qq.com> Date: Fri, 14 Apr 2023 00:38:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=A1=B9=E7=9B=AE=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E8=AF=B4=E6=98=8E,=E7=8E=AF=E5=A2=83=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E8=A7=A3=E7=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 54 +++++++- docs/在Anaconda中使用pip安装包无效问题.md | 145 ++++++++++++++++++++++ 2 files changed, 195 insertions(+), 4 deletions(-) create mode 100644 docs/在Anaconda中使用pip安装包无效问题.md diff --git a/README.md b/README.md index e9285bb..a741915 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ ### 硬件需求 - ChatGLM-6B 模型硬件需求 - + | **量化等级** | **最低 GPU 显存**(推理) | **最低 GPU 显存**(高效参数微调) | | -------------- | ------------------------- | --------------------------------- | | FP16(无量化) | 13 GB | 14 GB | @@ -56,23 +56,62 @@ 本项目中默认选用的 Embedding 模型 [GanymedeNil/text2vec-large-chinese](https://huggingface.co/GanymedeNil/text2vec-large-chinese/tree/main) 约占用显存 3GB,也可修改为在 CPU 中运行。 ### 软件需求 -本项目已在 python 3.8 环境下完成测试。 -### 1. 安装 python 依赖包 +本项目已在 python 3.8,cuda11.7 环境下完成测试。 + + + +### 1. 安装环境 + +- 环境检查 + +``` +# 首先,确信你的机器安装了 Python 3.8 及以上版本 +$ python --version +Python 3.8.13 + +# 如果低于这个版本,可使用conda安装环境 +$ conda create -p /your_path/env_name python=3.8 + +# 激活环境 +$ source activate /your_path/env_name + +# 关闭环境 +$ source deactivate /your_path/env_name + +# 删除环境 +$ conda env remove -p /your_path/env_name +``` + +- 项目依赖 + ```commandline -pip install -r requirements.txt + +# 拉取仓库 +$ git clone https://github.com/imClumsyPanda/langchain-ChatGLM.git + +# 安装依赖 +$ pip install -r requirements.txt + ``` 注:使用 langchain.document_loaders.UnstructuredFileLoader 进行非结构化文件接入时,可能需要依据文档进行其他依赖包的安装,请参考 [langchain 文档](https://python.langchain.com/en/latest/modules/indexes/document_loaders/examples/unstructured_file.html) + + ### 2. 执行脚本体验 Web UI 或命令行交互 执行 [webui.py](webui.py) 脚本体验 **Web 交互** ```commandline python webui.py ``` +注:执行前检查`$HOME/.cache/huggingface/`文件夹剩余空间,至少15G + + + 执行后效果如下图所示: ![webui](img/ui1.png) Web UI 中提供的 API 接口如下图所示: ![webui](img/ui2.png) Web UI 可以实现如下功能: + 1. 自动读取`knowledge_based_chatglm.py`中`LLM`及`embedding`模型枚举,选择后点击`setting`进行模型加载,可随时切换模型进行测试 2. 可手动调节保留对话历史长度,可根据显存大小自行调节 3. 添加上传文件功能,通过下拉框选择已上传的文件,点击`loading`加载文件,过程中可随时更换加载的文件 @@ -113,6 +152,13 @@ Q5: 本项目可否在 colab 中运行? A5: 可以尝试使用 chatglm-6b-int4 模型在 colab 中运行,需要注意的是,如需在 colab 中运行 Web UI,需将`webui.py`中`demo.queue(concurrency_count=3).launch( server_name='0.0.0.0', share=False, inbrowser=False)`中参数`share`设置为`True`。 + +Q6: 在Anaconda中使用pip安装包无效问题 + +此问题是系统环境问题,详细见 [在Anaconda中使用pip安装包无效问题](docs/在Anaconda中使用pip安装包无效问题.md) + + + ## DEMO 以问题`chatglm-6b 的局限性具体体现在哪里,如何实现改进`为例 diff --git a/docs/在Anaconda中使用pip安装包无效问题.md b/docs/在Anaconda中使用pip安装包无效问题.md new file mode 100644 index 0000000..c1213a9 --- /dev/null +++ b/docs/在Anaconda中使用pip安装包无效问题.md @@ -0,0 +1,145 @@ +## 在 Anaconda 中使用 pip 安装包无效问题 + +## 问题 + +最近在跑开源代码的时候遇到的问题:使用 conda 创建虚拟环境并切换到新的虚拟环境后,再使用 pip 来安装包会“无效”。这里的“无效”指的是使用 pip 安装的包不在这个新的环境中。 + +------ + +## 分析 + +1、首先创建一个测试环境 test,`conda create -n test` + +2、激活该测试环境,`conda activate test` + +3、使用 pip 安装 numpy,`pip install numpy`,会发现 numpy 已经存在默认的环境中 + +```shell +Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple +Requirement already satisfied: numpy in c:\programdata\anaconda3\lib\site-packages (1.20.3) +``` + +Bash + +Copy + +4、这时候看一下 pip 的信息,`pip show pip` + +```shell +Name: pip +Version: 21.2.4 +Summary: The PyPA recommended tool for installing Python packages. +Home-page: https://pip.pypa.io/ +Author: The pip developers +Author-email: distutils-sig@python.org +License: MIT +Location: c:\programdata\anaconda3\lib\site-packages +Requires: +Required-by: +``` + +Bash + +Copy + +5、可以发现当前 pip 是在默认的 conda 环境中。这也就解释了当我们直接使用 pip 安装包时为什么包不在这个新的虚拟环境中,因为使用的 pip 属于默认环境,安装的包要么已经存在,要么直接装到默认环境中去了。 + +------ + +## 解决 + +1、我们可以直接使用 conda 命令安装新的包,但有些时候 conda 可能没有某些包/库,所以还是得用 pip 安装 + +2、我们可以先使用 conda 命令为当前虚拟环境安装 pip 包,再使用 pip 安装新的包 + +```shell +# 使用 conda 安装 pip 包 +(test) PS C:\Users\Administrator> conda install pip +Collecting package metadata (current_repodata.json): done +Solving environment: done +.... +done + +# 显示当前 pip 的信息,发现 pip 在测试环境 test 中 +(test) PS C:\Users\Administrator> pip show pip +Name: pip +Version: 21.2.4 +Summary: The PyPA recommended tool for installing Python packages. +Home-page: https://pip.pypa.io/ +Author: The pip developers +Author-email: distutils-sig@python.org +License: MIT +Location: c:\programdata\anaconda3\envs\test\lib\site-packages +Requires: +Required-by: + +# 再使用 pip 安装 numpy 包,成功安装 +(test) PS C:\Users\Administrator> pip install numpy +Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple +Collecting numpy + Using cached https://pypi.tuna.tsinghua.edu.cn/packages/4b/23/140ec5a509d992fe39db17200e96c00fd29603c1531ce633ef93dbad5e9e/numpy-1.22.2-cp39-cp39-win_amd64.whl (14.7 MB) +Installing collected packages: numpy +Successfully installed numpy-1.22.2 + +# 使用 pip list 查看当前安装的包,没有问题 +(test) PS C:\Users\Administrator> pip list +Package Version +------------ --------- +certifi 2021.10.8 +numpy 1.22.2 +pip 21.2.4 +setuptools 58.0.4 +wheel 0.37.1 +wincertstore 0.2 +``` + +Bash + +Copy + +------ + +## 补充 + +1、之前没有发现这个问题可能时因为在虚拟环境中安装的包是指定版本的,覆盖了默认环境中的包。其实主要还是观察不仔细:),不然可以发现 `Successfully uninstalled numpy-xxx`【默认版本】 以及 `Successfully installed numpy-1.20.3`【指定版本】 + +2、测试时发现如果在新建包的时候指定了 python 版本的话应该是没有这个问题的,猜测时因为会在虚拟环境中安装好 pip ,而我们这里包括 pip 在内啥包也没有装,所以使用的是默认环境的 pip + +3、有个问题,之前我在创建新的虚拟环境时应该指定了 python 版本,但还是使用的默认环境的 pip 包,但是刚在在两台机器上都没有复现成功,于是有了上面的第 2 点 + +4、出现了第 3 点的问题后,我当时是使用 `python -m pip install package-name` 解决的,在 pip 前面加上了 python -m。至于为什么,可以参考 [StackOverflow](https://stackoverflow.com/questions/41060382/using-pip-to-install-packages-to-anaconda-environment) 上的回答: + +> 1、如果你有一个非 conda 的 pip 作为你的默认 pip,但是 conda 的 python 是你的默认 python(如下): +> +> ```shell +> >which -a pip +> /home//.local/bin/pip +> /home//.conda/envs/newenv/bin/pip +> /usr/bin/pip +> +> >which -a python +> /home//.conda/envs/newenv/bin/python +> /usr/bin/python +> ``` +> +> Bash +> +> Copy +> +> 2、然后,而不是直接调用 `pip install `,你可以在 python 中使用模块标志 -m,以便它使用 anaconda python 进行安装 +> +> ```shell +> python -m pip install +> ``` +> +> Bash +> +> Copy +> +> 3、这将把包安装到 anaconda 库目录,而不是与(非anaconda) pip 关联的库目录 +> +> 4、这样做的原因如下:命令 pip 引用了一个特定的 pip 文件 / 快捷方式(which -a pip 会告诉你是哪一个)。类似地,命令 python 引用一个特定的 python 文件(which -a python 会告诉你是哪个)。由于这样或那样的原因,这两个命令可能变得不同步,因此你的“默认” pip 与你的默认 python 位于不同的文件夹中,因此与不同版本的 python 相关联。 +> +> 5、与此相反,python -m pip 构造不使用 pip 命令指向的快捷方式。相反,它要求 python 找到它的pip 版本,并使用该版本安装一个包。 + +-