Quand j'ai fait conda install hogehoge, un paquet non planifié (ou python) a été mis à jour et le tout est mort, donc j'écrirai une contre-mesure après un mémorandum.
Ce que je voulais faire: Je voulais créer ma propre image en ajoutant plusieurs bibliothèques basées sur l'image docker de pytorch.
Ce que j'ai fait: j'ai écrit conda install docilement dans Dockerfile
Ce qui s'est passé: La version de python a changé au moment de l'installation de conda, et l'environnement conda a été endommagé et n'a pas pu être utilisé correctement.
Genin: non-concordance entre les versions conda et python
Ce que j'avais à faire (Conclusion): écrivez ce que vous voulez corriger dans un fichier appelé épinglé (cette fois résolu avec python == 3.6. *)
(Ou incluez le conda qui correspond à la version mise à jour de python; pas fait cette fois; au bas du lien de référence)
Is it possible to lock versions of packages in Anaconda? - Stack Overflow How to pin Conda | Damian's blog Notes sur la modification de la version python de conda --Qiita
J'ai écrit le Dockerfile suivant (l'ancienne image originale que j'utilise peut faire partie du problème ...).
FROM pytorch/pytorch:0.4.1-cuda9-cudnn7-devel
RUN apt update && apt upgrade -y
#Ce sera un problème plus tard
# joblib etc
RUN conda install -y \
    joblib \
    matplotlib \
    scikit-learn \
    tqdm
Puis construisez.
$ docker build -t mypytorch .
A ce moment, conda install les affiche comme des packages à mettre à jour (la partie qui posera problème plus tard).
The following packages will be UPDATED:
    ca-certificates:  2018.03.07-0            --> 2020.1.1-0
    certifi:          2018.4.16-py36_0        --> 2019.11.28-py38_0
    freetype:         2.9.1-h8a8886c_0        --> 2.9.1-h8a8886c_1
    libedit:          3.1.20170329-h6b74fdf_2 --> 3.1.20181209-hc058e9b_0
    libgcc-ng:        7.2.0-hdf63c60_3        --> 9.1.0-hdf63c60_0
    libpng:           1.6.34-hb9fc6fc_0       --> 1.6.37-hbc83047_0
    libstdcxx-ng:     7.2.0-hdf63c60_3        --> 9.1.0-hdf63c60_0
    mkl:              2018.0.3-1              --> 2020.0-166
    mkl_fft:          1.0.4-py36h4414c95_0    --> 1.0.15-py38ha843d7b_0
    mkl_random:       1.0.1-py36h4414c95_1    --> 1.1.0-py38h962f231_0
    ncurses:          6.1-hf484d3e_0          --> 6.2-he6710b0_0
    numpy:            1.14.5-py36h1b885b7_4   --> 1.18.1-py38h4f9e942_0
    numpy-base:       1.14.5-py36hdbf6ddf_4   --> 1.18.1-py38hde5b4d6_1
    openssl:          1.0.2o-h20670df_0       --> 1.1.1d-h7b6447c_4
    pip:              10.0.1-py36_0           --> 20.0.2-py38_1
    python:           3.6.5-hc3d631a_2        --> 3.8.1-h0371630_1
    readline:         7.0-ha6073c6_4          --> 7.0-h7b6447c_5
    scipy:            1.1.0-py36hc49cb51_0    --> 1.4.1-py38h0b6359f_0
    setuptools:       39.2.0-py36_0           --> 45.2.0-py38_0
    six:              1.11.0-py36h372c433_1   --> 1.14.0-py38_0
    sqlite:           3.23.1-he433501_0       --> 3.31.1-h7b6447c_0
    tk:               8.6.7-hc745277_3        --> 8.6.8-hbc83047_0
    wheel:            0.31.1-py36_0           --> 0.34.2-py38_0
    zlib:             1.2.11-ha838bed_2       --> 1.2.11-h7b6447c_3
Maintenant que la construction est terminée, je vais triomphalement fabriquer un conteneur.
$ docker run -it --rm mypytorch bash
Lorsque j'essaie d'utiliser des commandes de type conda dans le conteneur, cela ne fonctionne pas.
root@ce88f6b1ba73:/workspace# conda
Traceback (most recent call last):
  File "/opt/conda/bin/conda", line 7, in <module>
    from conda.cli import main
ModuleNotFoundError: No module named 'conda'
D'autres ʻi pythonne fonctionnent pas, ou ne peuvent pas être aidés, donc même si vous essayez depython` comme ci-dessous, c'est inutile.
root@ce88f6b1ba73:/workspace# python
Python 3.8.1 (default, Jan  8 2020, 22:29:32)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'torch'
>>>
Donc, j'ai créé une image de quelque chose que je veux déplacer mais rien qui bouge.
C'était le problème. La version de python a été mise à jour vers la version 3.8.1.
The following packages will be UPDATED:
...
    python:           3.6.5-hc3d631a_2        --> 3.8.1-h0371630_1
...
Il semble que cela ne fonctionnera pas si seulement python est mis à jour sans changer la version de conda. Il y a deux façons de le résoudre.
conda et python ensemblepythonCette fois, nous corrigerons la version. Pour corriger la version, écrivez ce que vous voulez corriger dans conda-meta / pinned sous le répertoire de gestion de anaconda / miniconda (la manière dont elle sera gérée lorsque plusieurs environnements sont créés n'a pas été vérifiée).
Cette fois, puisque python est fixé à la série 3.6, ce sera comme suit (ici, la destination de l'installation est / opt. Cela dépend de votre environnement).
$ echo "python=3.6.*" >> /opt/conda/conda-meta/pinned
Cela fonctionnera si cela se trouve dans le Dockerfile. En d'autres termes, cela devient comme suit.
FROM pytorch/pytorch:0.4.1-cuda9-cudnn7-devel
RUN apt update && apt upgrade -y
#Version de la broche avant l'installation de conda
RUN echo "python=3.6.*" >> /opt/conda/conda-meta/pinned
# joblib etc
RUN conda install -y \
    joblib \
    matplotlib \
    scikit-learn \
    tqdm
Je ne pense pas que ce soit un accident qui arrive très souvent, mais j'espère que cela aide quelqu'un.
Recommended Posts