记录一次配置环境心态崩溃……

记录一次配置环境心态崩溃……

以下为学习百度AIstudio的一个NER教程的记录,源代码地址为:

https://aistudio.baidu.com/aistudio/projectdetail/5930239?forkThirdPart=1

在云端跑的很顺,然后想放到本地跑……

配置环境

第一次冲锋

  • 首先在线跑通了,然后在BML里面新建终端,导出环境里面所需要的包,打算去本地新建一个虚拟环境

    pip freeze > requirements.txt
    python --version
    
  • 然后在本地新建一个虚拟环境

    pip install -r requirements.txt
    

    遇到了这个问题

    Processing g:\tmp\output\deps\ipykernel-6.9.1-py3-none-any.whl
    ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '\\tmp\\output\\deps\\ipykernel-6.9.1-py3-none-any.whl'
    
    • chatgpt的回答如下

      这个错误信息表明,pip 在尝试安装 ipykernel-6.9.1-py3-none-any.whl 包时,无法找到该包所在的目录。通常这个问题是由于 pip 缓存目录设置不当或者目录权限问题引起的。

      解决这个问题的方法有两种:

      1. 清除 pip 缓存并重新安装:

        这个方法会清除 pip 的缓存目录,然后重新下载安装包并进行安装。在终端中运行以下命令:

        	pip cache purge
        pip install --no-cache-dir ipykernel==6.9.1
        

        这个命令会清除 pip 缓存目录,然后重新下载安装 ipykernel-6.9.1-py3-none-any.whl 包。

      2. 检查目录权限:

        这个方法会检查目录权限是否设置正确。在终端中运行以下命令:

        ls -l /tmp/output/deps/ipykernel-6.9.1-py3-none-any.whl
        
        

        这个命令会列出 ipykernel-6.9.1-py3-none-any.whl 包的详细信息,包括所有者和权限。如果该文件的所有者不是当前用户或者当前用户没有足够的权限读取该文件,则需要使用 chownchmod 命令更改文件的所有者和权限。例如,以下命令会将 ipykernel-6.9.1-py3-none-any.whl 的所有者设置为当前用户:

        sudo chown $USER /tmp/output/deps/ipykernel-6.9.1-py3-none-any.whl
        
        

        然后,你可以再次运行 pip install ipykernel==6.9.1 命令进行安装。

    • 尝试后无果

  • 然后去看了下 requirements.txt

    看到有两个@的

    jupyter-server @ file:///tmp/output/deps/jupyter_server-1.16.0-py3-none-any.whl
    ipykernel @ file:///tmp/output/deps/ipykernel-6.9.1-py3-none-any.whl
    

    把@后面的删掉了,果真可以正常pip install了

    但是pip install完成之后…

    ERROR: Ignored the following versions that require a different python version: 0.1.0b0 Requires-Python >=3.8; 0.40.0rc1 Requires-Python >=3.8; 0.57.0rc1 Requires-Python >=3.8; 1.22.0 Requires-Python >=3.8; 1.22.1 Requires-Python >=3.8; 1.22.2 Requires-Python >=3.8; 1.22.3 Requires-Python >=3.8; 1.22.4 Requires-Python >=3.8; 1.23.0 Requires-Python >=3.8; 1.23.0rc1 Requires-Python >=3.8; 1.23.0rc2 Requires-Python >=3.8; 1.23.0rc3 Requires-Python >=3.8; 1.23.1 Requires-Python >=3.8; 1.23.2 Requires-Python >=3.8; 1.23.3 Requires-Python >=3.8; 1.23.4 Requires-Python >=3.8; 1.23.5 Requires-Python >=3.8; 1.24.0 Requires-Python >=3.8; 1.24.0rc1 Requires-Python >=3.8; 1.24.0rc2 Requires-Python >=3.8; 1.24.1 Requires-Python >=3.8; 1.24.2 Requires-Python >=3.8; 2.0.0 Requires-Python >=3.8; 2.0.0rc4 Requires-Python >=3.8; 2.0.0rc5 Requires-Python >=3.8; 2.0.0rc6 Requires-Python >=3.8; 2.0.0rc7 Requires-Python >=3.8; 2.0.0rc8 Requires-Python >=3.8; 2.0.1 Requires-Python >=3.8; 2.0.2 Requires-Python >=3.8; 2.0.3 Requires-Python >=3.8; 2.0.4 Requires-Python >=3.8; 2.0.5 Requires-Python >=3.8; 2.0.6 Requires-Python >=3.8; 2.0.7 Requires-Python >=3.8; 2.1.0 Requires-Python >=3.8; 2.2.0 Requires-Python >=3.8; 2.2.1 Requires-Python >=3.8; 2.3.0 Requires-Python >=3.8; 2.4.0 Requires-Python >=3.8; 2.5.0 Requires-Python >=3.8; 2.7 Requires-Python >=3.8; 2.7.1 Requires-Python >=3.8; 2.7rc1 Requires-Python >=3.8; 2.8 Requires-Python >=3.8; 2.8.1 Requires-Python >=3.8; 2.8.1rc1 Requires-Python >=3.8; 2.8.2 Requires-Python >=3.8; 2.8.3 Requires-Python >=3.8; 2.8.4 Requires-Python >=3.8; 2.8.5 Requires-Python >=3.8; 2.8.6 Requires-Python >=3.8; 2.8.7 Requires-Python >=3.8; 2.8.8 Requires-Python >=3.8; 2.8rc1 Requires-Python >=3.8; 2023.3.0 Requires-Python >=3.8; 2023.4.0 Requires-Python >=3.8; 3.0 Requires-Python >=3.8; 3.0b1 Requires-Python >=3.8; 3.0rc1 Requires-Python >=3.8; 3.1 Requires-Python >=3.8; 3.1rc0 Requires-Python >=3.8; 3.6.0 Requires-Python >=3.8; 3.6.0rc1 Requires-Python >=3.8; 3.6.0rc2 Requires-Python >=3.8; 3.6.1 Requires-Python >=3.8; 3.6.2 Requires-Python >=3.8; 3.6.3 Requires-Python >=3.8; 3.7.0 Requires-Python >=3.8; 3.7.0rc1 Requires-Python >=3.8; 3.7.1 Requires-Python >=3.8; 4.0.0a33 Requires-Python >=3.8; 4.0.0a34 Requires-Python >=3.8; 4.0.0a35 Requires-Python >=3.8; 4.0.0a36 Requires-Python >=3.8; 4.0.0a37 Requires-Python >=3.8; 4.0.0b0 Requires-Python >=3.8; 4.0.0b1 Requires-Python >=3.8; 4.18.0a1 Requires-Python >=3.8; 4.18.0a2 Requires-Python >=3.8; 4.18.0a3 Requires-Python >=3.8; 5.0.0 Requires-Python >=3.8; 5.1.0 Requires-Python >=3.8; 5.1.1 Requires-Python >=3.8; 5.1.2 Requires-Python >=3.8; 5.1.3 Requires-Python >=3.8; 5.1.4 Requires-Python >=3.8; 5.1.5 Requires-Python >=3.8; 5.12.0 Requires-Python >=3.8.0; 5.2.0 Requires-Python >=3.8; 5.3.0 Requires-Python >=3.8; 6.0.0 Requires-Python >=3.8.1; 6.17.0 Requires-Python >=3.8; 6.17.1 Requires-Python >=3.8; 6.18.0 Requires-Python >=3.8; 6.18.1 Requires-Python >=3.8; 6.18.2 Requires-Python >=3.8; 6.18.3 Requires-Python >=3.8; 6.19.0 Requires-Python >=3.8; 6.19.1 Requires-Python >=3.8; 6.19.2 Requires-Python >=3.8; 6.19.3 Requires-Python >=3.8; 6.19.4 Requires-Python >=3.8; 6.20.0 Requires-Python >=3.8; 6.20.1 Requires-Python >=3.8; 6.20.2 Requires-Python >=3.8; 6.21.0 Requires-Python >=3.8; 6.21.1 Requires-Python >=3.8; 6.21.2 Requires-Python >=3.8; 6.21.3 Requires-Python >=3.8; 6.22.0 Requires-Python >=3.8; 7.0.0a12 Requires-Python >=3.8; 7.0.0a13 Requires-Python >=3.8; 7.0.0a14 Requires-Python >=3.8; 7.0.0a15 Requires-Python >=3.8; 7.0.0a16 Requires-Python >=3.8; 7.0.0a17 Requires-Python >=3.8; 7.0.0a18 Requires-Python >=3.8; 7.0.0b0 Requires-Python >=3.8; 8.0.0 Requires-Python >=3.8; 8.0.0a1 Requires-Python >=3.8; 8.0.0a2 Requires-Python >=3.8; 8.0.0a3 Requires-Python >=3.8; 8.0.0a4 Requires-Python >=3.8; 8.0.0b0 Requires-Python >=3.8; 8.0.0b1 Requires-Python >=3.8; 8.0.0b2 Requires-Python >=3.8; 8.0.0b3 Requires-Python >=3.8; 8.0.0rc0 Requires-Python >=3.8; 8.0.0rc1 Requires-Python >=3.8; 8.0.1 Requires-Python >=3.8; 8.0.2 Requires-Python >=3.8; 8.0.3 Requires-Python >=3.8; 8.1.0 Requires-Python >=3.8; 8.1.1 Requires-Python >=3.8; 8.10.0 Requires-Python >=3.8; 8.11.0 Requires-Python >=3.8; 8.12.0 Requires-Python >=3.8; 8.2.0 Requires-Python >=3.8; 8.3.0 Requires-Python >=3.8; 8.4.0 Requires-Python >=3.8; 8.5.0 Requires-Python >=3.8; 8.6.0 Requires-Python >=3.8; 8.7.0 Requires-Python >=3.8; 8.8.0 Requires-Python >=3.8; 8.9.0 Requires-Python >=3.8
    ERROR: Could not find a version that satisfies the requirement paddlepaddle-gpu==2.1.2.post101 (from versions: 1.4.0, 1.4.1, 1.5.0.post87, 1.5.0.post97, 1.5.1.post87, 1.5.1.post97, 1.5.2.post87, 1.5.2.post97, 1.5.2.post107, 1.6.0.post107, 1.6.1.post97, 1.6.1.post107, 1.6.2.post97, 1.6.2.post107, 1.6.3.post97, 1.7.0.post97, 1.7.0.post107, 1.7.1.post97, 1.7.1.post107, 1.7.2.post97, 1.7.2.post107, 1.8.0.post97, 1.8.0.post107, 1.8.1.post97, 1.8.1.post107, 1.8.2.post97, 1.8.2.post107, 1.8.3.post97, 1.8.3.post107, 1.8.4.post97, 1.8.4.post107, 1.8.5.post97, 1.8.5.post107, 2.0.0a0, 2.0.0rc1, 2.0.0, 2.0.1, 2.0.2, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.2.0rc0, 2.2.0, 2.2.1, 2.2.2, 2.3.0rc0, 2.3.0, 2.3.1, 2.3.2, 2.4.0rc0, 2.4.0, 2.4.1, 2.4.2)
    ERROR: No matching distribution found for paddlepaddle-gpu==2.1.2.post101
    

    可是我当时在云环境看python版本的时候就是3.7啊,所以conda create的时候安装了3.7

  • all right,升级一下

    mamba install python==3.8

  • 然后发现因为之前是3.7,好多requirements.txt里面的东西都没装上,包括ipykernel

    mamba install ipykernel

    (也有可能是升级了python版本,然后就是得重新装??)

  • 然后再运行一次 pip install -r requirements.txt

    然后又报了一堆错,不管了,只安装需要import的包…

    呃,还是报错…… 麻了,重开吧

第二次冲锋

  • 删掉虚拟环境 ,重新建一个,重新安装…

    (难蚌,安装paddle是要pip install paddlepaddle而不是pip install paddle…在这一步浪费好多时间)

    还有就是

    pip install paddlepaddle-gpu==2.1.2.post101
    ERROR: Could not find a version that satisfies the requirement paddlepaddle-gpu==2.1.2.post101 (from versions: 1.8.5.post97, 1.8.5.post107, 2.0.0rc1, 2.0.0, 2.0.1, 2.0.2, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.2.0rc0, 2.2.0, 2.2.1, 2.2.2, 2.3.0rc0, 2.3.0, 2.3.1, 2.3.2, 2.4.0rc0, 2.4.0, 2.4.1, 2.4.2)
    ERROR: No matching distribution found for paddlepaddle-gpu==2.1.2.post101
    

    这个把.post101去掉就ok

    突然发现vscode中,点开requirements.txt文件,会有创建环境按钮,有conda和venv选项

  • 太折磨了,尤其最后400多MB的 paddlepaddle-gpu==2.1.2 ,重新冲了五六次才成功……

    何时要使用—user
    在使用pip安装Python库时,如果你没有管理员权限,那么就需要使用–user选项来将库安装到你的用户目录下,而不是全局安装到系统目录。这个选项会将Python库安装到~/.local/lib/pythonX.X/site-packages/目录下,其中X.X是你的Python版本号。当你在没有管理员权限的环境中安装Python库时,使用–user选项是一种很常见的做法。例如,在使用Jupyter Notebook或Google Colab时,因为你没有管理员权限,你就需要使用–user选项来安装Python库。

  • 还有遇到一个paddlenlp的报错

    cannot import name 'einsum' from 'paddle’ ,按照GitHub的issue升级到2.3.0,ok了

  • 心态真的崩了

    • 各种小问题不断解决

    • 终于到了最后一步,结果怎么都搞不好啊啊啊啊啊啊啊

      > 2097 outs = getattr(self, mode + '_batch')(*_inputs)
         2099 if self._metrics and self._loss:
         2100     metrics = [[l[0] for l in outs[0]]]
      
      File d:\Anaconda3\envs\BaiduBilstm\lib\site-packages\paddle\hapi\model.py:1093, in Model.train_batch(self, inputs, labels, update)
         1045 def train_batch(self, inputs, labels=None, update=True):
      ...
        10402     if isinstance(x, Variable) and x.desc.type(
        10403     ) == core.VarDesc.VarType.LOD_TENSOR_ARRAY:
      
      ValueError: (InvalidArgument) The DataType of stack Op's duplicable or different slot Variable X must be consistent or reigster GetExpectedKernelType. The current variable type is (int), but the previous variable type is (int64_t). (at ..\paddle\fluid\framework\operator.cc:2049)
        [operator < stack > error]
      

      chatgpt帮我解决了这个,

      这个错误信息提示在执行 stack 操作时,输入的数据类型不一致。当前变量类型是 int,但之前的变量类型是 int64_t。为了解决这个问题,请确保所有传递给 stack 操作的数据类型都是一致的。

      在您的代码中,这个问题可能出现在数据预处理部分。在数据集类 NSR__getitem__ 方法中,确保返回的数据类型是一致的。例如,将返回的数据类型都转换为 int64 类型:

      def __getitem__(self,index):
          # 把token转为id,并按crf和decoder要求,多输出一个实际句长(后面会进行pad操作,只能在这里求实际句长)
          cn_words = self.data_list.text_a[index]
          labels = self.data_list.label[index]
          return np.array(cn_vocab.to_indices(cn_words), dtype=np.int64), np.array([len(cn_words)], dtype=np.int64), np.array(label_vocab.to_indices(labels), dtype=np.int64)
      
      

      这里,我使用了 np.array 并指定了 dtype=np.int64 以确保返回的数据类型是 int64

      在解决数据类型不一致问题之后,您可能需要根据新的返回类型更新后续的数据处理代码。 例如,您可能需要更新 batch_fn 中的 PadStack 操作以处理新的数据类型。

  • 结果又来了下一个

    **ValueError**
    
    : (InvalidArgument) The number of elements (2) of 'shape' for expand_v2 op must be greater than or equal to the rank (3) of the input.
      [Hint: Expected expand_shape.size() >= static_cast(x_dims.size()), but received expand_shape.size():2 < static_cast(x_dims.size()):3.] (at ..\paddle\phi\infermeta\unary.cc:462)
      [operator < expand_v2 > error]
    

蚌埠住了,再重新建一个环境

  • 这次直接 根据 requirements.txt里面的版本 ,pip install paddlepaddle-gpu 、 paddlenlp 等

  • 关于cudnn和cuda

    去phind里面查了一下

    paddlepaddle-gpu 2.3.0对应的cuda和cudnn版本
    ANSWER
    根据 PaddlePaddle 官方文档,PaddlePaddle-GPU 2.3.0 支持的 CUDA 和 cuDNN 版本如下:
    
    CUDA 10.2
    cuDNN 7.6.5
    

    于是我在终端里面

    mamba install cudnn=7.6.5
    

    安装ok

    
      Updating specs:
    
       - cudnn=7.6.5
       - ca-certificates
       - certifi
       - openssl
    
      Package        Version  Build       Channel                                                      Size
    ---------------------------------------------------------------------------------------------------------
      Install:
    ---------------------------------------------------------------------------------------------------------
    
      + cudatoolkit  10.2.89  h74a9793_1  mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64     Cached
      + cudnn          7.6.5  cuda10.2_0  mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64     Cached
    
      Summary:
    
      Install: 2 packages
    
      Total download: 0 B
    
    ---------------------------------------------------------------------------------------------------------
    
  • 目前有时候找答案会局限于chatgpt,有时候还是别忘了以前的搜索习惯(GitHub issues,google,csdn,StackOverflow等等)

你可能感兴趣的:(机器学习,python,开发语言)