Skip to content
Snippets Groups Projects
Select Git revision
  • 6dcb80f509e4eb6a320cbc1c8aa915c7b6f924d2
  • master default protected
2 results

anleitung_linux_openai-gym.tex

Blame
  • anleitung_linux_openai-gym.tex 14.01 KiB
    \RequirePackage{luatex85}
    \documentclass[12pt]{scrartcl}
    \usepackage[utf8]{inputenc}
    \usepackage[ngerman]{babel}
    
    \usepackage{xcolor}
    \usepackage{graphicx}
    
    \usepackage{listings}
    \lstset{basicstyle=\ttfamily,
            escapeinside={\#*}{*},   % escape to LaTeX
            columns=flexible,        % allow copying
            keepspaces=true,
    }
    
    \usepackage{tikz}
    \usetikzlibrary{backgrounds}
    \usetikzlibrary{calc}
    \usetikzlibrary{arrows.meta}
    
    \newcommand*\keystroke[1]{%
      \begin{tikzpicture}[baseline=(key.base), very thin, line cap=round, black, rounded corners=0pt]%
        \node [draw, fill=white, fill opacity=1, rectangle, rounded corners=2pt, inner sep=1pt, minimum size=0.8em, font=\scriptsize\sffamily] (key) {#1};
    
        \begin{scope}[on background layer]
          \draw [rounded corners=1pt, fill=white] ($ (key.north west) + (-2pt, 2pt) $) rectangle ($ (key.south east) + (2pt, -2pt) $);
    
          \fill [gray!60] ($ (key.south west) + (2pt, 0.1pt) $) -- ($ (key.south west) + (-1pt, -2pt) $)
                      -- ($ (key.south east) + (1pt, -2pt) $)  -- ($ (key.south east) + (-2pt, 0.1pt) $) -- cycle;
    
          \fill [gray!60] ($ (key.south east) + (-0.1pt, 2pt) $) -- ($ (key.south east) + (2pt, -1pt) $)
                      -- ($ (key.north east) + (2pt, 1pt) $)    -- ($ (key.north east) + (-0.1pt, -2pt) $) -- cycle;
        \end{scope}
    
        \draw ($ (key.north west) + (0.1pt, -2pt) $) -- ($ (key.north west) + (-2pt, 1pt) $);
        \draw ($ (key.north west) + (2pt, -0.1pt) $) -- ($ (key.north west) + (-1pt, 2pt) $);
    
        \draw ($ (key.north east) + (-0.1pt, -2pt) $) -- ($ (key.north east) + (2pt, 1pt) $);
        \draw ($ (key.north east) + (-2pt, -0.1pt) $) -- ($ (key.north east) + (1pt, 2pt) $);
    
        \draw ($ (key.south west) + (0.1pt, 2pt) $) -- ($ (key.south west) + (-2pt, -1pt) $);
        \draw ($ (key.south west) + (2pt, 0.1pt) $) -- ($ (key.south west) + (-1pt, -2pt) $);
    
        \draw ($ (key.south east) + (-0.1pt, 2pt) $) -- ($ (key.south east) + (2pt, -1pt) $);
        \draw ($ (key.south east) + (-2pt, 0.1pt) $) -- ($ (key.south east) + (1pt, -2pt) $);
      \end{tikzpicture}%
    }
    
    \newcommand{\keyenter}{\keystroke{Enter\,\tikz [baseline=-2mm, rounded corners=0pt] \draw [semithick, -{Triangle[length=1mm, width=1mm]}] (0, 0) -- ++(down:1mm) -- ++(left:2mm);}}
    \newcommand{\keytab}{\keystroke{Tab\,%
      \begin{tikzpicture}[baseline=-1.1mm, rounded corners=0pt, semithick]%
        \draw [-{Triangle[length=0.7mm, width=0.7mm] Bar[width=0.7mm]}] (0, 0.6mm) -- ++(2mm, 0);%
        \draw [{Bar[width=0.7mm] Triangle[length=0.7mm, width=0.7mm]}-] (0, -0.6mm) -- ++(2mm, 0);%
      \end{tikzpicture}%
    }}
    
    \usepackage[colorlinks=true,urlcolor=blue,unicode=true,pdfusetitle]{hyperref}
    \usepackage[color=blue, author={Christof Kaufmann}]{attachfile2} % load after hyperref to avoid option clash from unicode=true
    
    \title{Installationsanleitung für Python mit OpenAI Gym für Linux}
    \date{April 2023}
    \author{Christof Kaufmann}
    
    % one infinite page, https://tex.stackexchange.com/a/19241/115883
    \usepackage[paperheight=\maxdimen]{geometry}
    \usepackage[active,tightpage]{preview}
    \renewcommand{\PreviewBorder}{1ex}
    
    % preserve parindent, https://tex.stackexchange.com/a/98214
    \usepackage{etoolbox}
    \edef\keptparindent{\the\parindent}
    \patchcmd{\preview}
      {\ignorespaces} %%% \preview ends with \ignorespaces
      {\parindent\keptparindent\ignorespaces}
      {}{}
    \begin{document}
    \begin{preview}
    \vspace*{-3em}
    \maketitle
    
    \begin{abstract}
      In dieser Installationsanleitung wird die Installation von Python mit TensorFlow, Scikit-Learn, Gymnasium und weiteren Paketen mit Mamba gezeigt. Weiterhin wird die Installation von den Python-IDEs Spyder und Visual Studio Code gezeigt. Als Linux-Distribution wird Ubuntu angenommen. Falls Sie eine andere Distribution benutzen, müssten Sie die Befehle anpassen.
    \end{abstract}
    
    
    \section{Mambaforge}
    
    Zunächst installieren wir die Python-Distribution \textit{Mambaforge}. Dazu laden wir die Installationsdatei herunter und führen sie aus:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\scriptsize]
      wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh
      bash Mambaforge-Linux-x86_64.sh
    \end{lstlisting}
    Nun müssen wir mit \keyenter\ bestätigen, dass wir die Lizenzbedingungen lesen und können diese dann mit der Leertaste herunterscrollen um dann \texttt{yes} einzutippen und mit \keyenter\ den Lizenzbedingungen zustimmen:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize\color{gray}]
      Do you accept the license terms? [yes|no]
      [no] >>> #*\color{black}yes*
    \end{lstlisting}
    Als Installationspfad, können Sie den Standardpfad \lstinline|/home/<user>/mambaforge| verwenden oder, wenn Sie ihr Home-Verzeichnis etwas aufgeräumter lassen wollen, wählen Sie \lstinline|/home/<user>/.local/opt/mambaforge|, z.\,B.\ so für den Benutzer \textit{john}:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize\color{gray}]
      Mambaforge will now be installed into this location:
      /home/john/mambaforge
    
        - Press ENTER to confirm the location
        - Press CTRL-C to abort the installation
        - Or specify a different location below
    
      [/home/john/mambaforge] >>> #*\color{black}/home/john/.local/opt/mambaforge*
    \end{lstlisting}
    Nach der Installation können Sie auswählen, dass die Conda-Umgebung automatisch aktiviert werden soll:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize\color{gray}]
      Do you wish the installer to initialize Mambaforge
      by running conda init? [yes|no]
      [no] >>> #*\color{black}yes*
    \end{lstlisting}
    Damit wurde ein Eintrag in die \lstinline|~/.bashrc| geschrieben. Um die Umgebung aktivieren, lassen Sie die Datei einlesen:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      source ~/.bashrc
    \end{lstlisting}
    Nun sollte die \texttt{base}-Environment aktiviert sein, was Sie auch am Prompt erkennnen können, wie im folgenden Code-Abschnitt ausnahmsweise dargestellt.
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      #*\color{gray}(base) \color{green!80!black}john \color{gray}→ \color{blue!90!black!70}\textasciitilde\ \color{gray}\$*
    \end{lstlisting}
    
    
    
    \section{Conda-Umgebung}
    
    Wir erstellen nun eine Umgebung namens \lstinline|ml| mit Python 3.10 und den benötigten Paketen. Falls Sie eine NVIDIA-GPU haben, ersetzen Sie \lstinline|tensorflow| durch \lstinline|tensorflow-gpu=2.10| und beachten auch die weiteren Hinweise in Abschnitt~\ref{sec:gpu}.
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      mamba create -n ml python=3.10 tensorflow ipympl tqdm mypy jupyter pystan \
                         matplotlib seaborn scikit-learn openpyxl odfpy pyarrow \
                         geopandas descartes pyogrio spyder \
                         jax-jumpy moviepy shimmy-atari gymnasium-box2d
    \end{lstlisting}
    
    Sie können die Umgebung jederzeit mit \lstinline|mamba activate ml| aktivieren und mit \lstinline|mamba deactivate| deaktivieren. Generell können Sie mit \lstinline|mamba create -n <MYENVNAME> <PAKETE>| auch weitere Umgebungen einrichten und diese mit \lstinline|mamba activate <MYENVNAME>| aktivieren.
    
    Installieren Sie nun in der Umgebung \lstinline|ml| noch Pakete, die es (noch) nicht in conda-forge gibt, sondern nur in PyPI. Hierdurch können allerdings Probleme in Ihrer Umgebung entstehen.
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      #*\color{gray}(base) \color{green!80!black}john \color{gray}→ \color{blue!90!black!70}\textasciitilde\ \color{gray}\$* mamba activate ml   #*\color{cyan}\# \itshape wir wollen in 'ml' installieren*
      #*\color{gray}(ml) \color{green!80!black}john \color{gray}→ \color{blue!90!black!70}\textasciitilde\ \color{gray}\$* pip install emnist autorom[accept-rom-license]
    \end{lstlisting}
    
    
    
    \section{NVIDIA-GPU}
    \label{sec:gpu}
    
    \begin{minipage}{0.6\linewidth}
      Nur falls Sie eine NVIDIA-GPU haben und TensorFlow inkl.\ Keras diese nutzen soll, benötigen Sie zusätzlich zur \textbf{TensorFlow-GPU-Version} (siehe Kommentar zu \lstinline|tensorflow-gpu| oben) den proprietären Grafiktreiber:
    \end{minipage}%
    \hfill%
    \begin{minipage}{0.35\linewidth}
      \includegraphics[width=\linewidth]{images/keras-tensorflow-logo}
    \end{minipage}
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      sudo apt install nvidia-driver             #*\color{cyan}\# \itshape Debian, benötigt: contrib non-free*
      sudo apt install nvidia-driver-510         #*\color{cyan}\# \itshape Ubuntu*
    \end{lstlisting}
    Installieren Sie auch \lstinline|ptxas| über das nvidia-Repository um eine Warnmeldung beim Importieren von TensorFlow zu vermeiden:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      mamba activate ml   #*\color{cyan}\# \itshape sicherstellen, dass Sie in der 'ml' Umgebung sind*
      mamba install --no-deps -c nvidia -c conda-forge tensorflow-gpu=2.10 cuda-nvcc
    \end{lstlisting}
    Falls bei der Installation von \lstinline|cuda-nvcc| der Fehler \texttt{[Errno 2] No such file or directory: '/.../mambaforge/nvvm/bin'} auftritt, versuchen Sie \lstinline|/../mambaforge/nvvm| zu löschen -- möglicherweise ist dies ein verwaister symbolischer Link -- und \lstinline|cuda-nvcc| erneut zu installieren.
    
    
    \section{IDE}
    
    Als Programmierumgebung können Sie wählen, was sie möchten. Wir beschreiben hier zwei verschiedene IDEs und zwar Spyder und Visual Studio Code. Spyder ist etwas freundlicher für den Einstieg und VS Code ist moderner und hat einen besseren Editor mit Jupyter Notebook Support. Weitere beliebte Alternativen sind \href{https://www.jetbrains.com/de-de/pycharm/}{PyCharm} und Jupyter Notebooks (tippen Sie in Ihrer Conda-Umgebung \lstinline|jupyter-notebook| ein).
    
    
    
    \subsubsection*{Spyder}
    
    Laut Installationshinweisen und Debugging müssen folgende Abhängigkeiten auf dem System installiert werden, falls GUI-Pakete, wie Spyder, verwendet werden sollen:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      sudo apt install libgl1-mesa-glx libegl1-mesa libxrandr2 libxss1 libxcursor1 \
                       libxcomposite1 libasound2 libxi6 libxtst6 libxdamage1 libpci3
    \end{lstlisting}
    Wir haben Spyder bereits in der Conda-Umgebung \lstinline|ml| installiert. Als nächstes starten wir Spyder und testen die Installation mit einem kleinen, neuronalen Netz, das lernt handgeschriebene Ziffern zu erkennen. Aus der Conda-Umgebung in der Spyder installiert wurde, starten wir Spyder mit:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      mamba activate ml   #*\color{cyan}\# \itshape sicherstellen, dass Sie in der 'ml' Umgebung sind*
      spyder &
    \end{lstlisting}
    
    Spyder öffnet sich nun. Wenn Sie die Plots lieber in eigenständigen Fenster angezeigt haben wollen, sodass sie zoomen können, wählen sie unter \textit{Tools} $\rightarrow$ \textit{Preferences} $\rightarrow$ \textit{IPython console} $\rightarrow$ \textit{Graphics} $\rightarrow$ \textit{Backend} den Eintrag \textit{Automatic}. Anschließend müssen Sie evtl.\ Spyder schließen und erneut starten.
    \vspace{-1ex}
    
    \noindent
    \includegraphics[width=\linewidth]{images/spyder-pref}
    \vspace{-2em}
    
    Laden Sie nun in Spyder das beigelegte Testprogramm \textattachfile{attachments/mnistKeras.py}{\texttt{mnistKeras.py}}.
    Starten Sie das Skript durch Drücken auf \keystroke{F5} bzw.\ den grünen Play-Button oben in Werkzeugleise bzw.\ über das Menü \textit{Run} $\rightarrow$ \textit{Run}.
    \vspace{-1ex}
    
    \noindent
    \includegraphics[width=\linewidth]{images/spyder-linux}
    \vspace{-1.5em} % due to some transparent border in the image
    
    
    
    \subsubsection*{Visual Studio Code}
    
    VS Code wird unabhängig von Conda installiert und man wählt nachträglich die Conda-Umgebung \lstinline|ml| als Python-Interpreter aus. Laden Sie es \href{https://code.visualstudio.com/docs/?dv=linux64_deb}{hier} herunter und installieren es.
    Alternativ kann auch \href{https://vscodium.com/}{VS Codium} installiert werden.
    Starten Sie VS Code z.\,B.\ über die Kommandozeile mit:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      code
    \end{lstlisting}
    Speichern Sie das beigelegte Testprogramm \textattachfile{attachments/mnistKeras.py}{\texttt{mnistKeras.py}} und klicken in VS Code auf Open Folder um das darüberliegende Verzeichnis zu öffnen. Öffnen Sie dann die Datei \textattachfile{attachments/mnistKeras.py}{\texttt{mnistKeras.py}}. Wie in der Abbildung dargestellt, installieren Sie die Python-Extension, wählen Sie den installierten Python-Interpreter (\lstinline|ml|) aus und klicken Sie anschließend mit der rechten Maustaste irgendwo in das Editor-Fenster:
    \vspace{-1em}
    
    \noindent
    \includegraphics[width=\linewidth]{images/vscode-python-extension}
    \vspace{-1.5em}
    
    \noindent
    Falls Ihre Installation dort nicht auftaucht, wählen Sie bei \textit{Enter interpreter path...} den Installationspfad zur Binärdatei \lstinline|python| aus, also z.\,B.\ \texttt{/home/john/.local/opt/mambaforge/bin/python}. Spätestens dann nach Schritt 6 (Rechtsklick ins Editor-Fenster)
    klicken Sie im Kontext-Menü auf \textit{Run Current File in Interactive Window}:
    \vspace{-0.5em}
    \begin{center}
      \includegraphics[width=0.6\linewidth]{images/vscode-python-run-interactive}
    \end{center}
    \vspace{-0.5em}
    Dadurch erhalten Sie rechts eine Konsole in dem eine interaktive Python-Session ausgeführt wird:
    \vspace{-1ex}
    
    \noindent
    \includegraphics[width=\linewidth]{images/vscode-python-mnist-training}
    \vspace{-1.5em} % due to some transparent border in the image
    
    
    
    \subsubsection*{Testskript}
    
    Hier ist kurz beschrieben, was das Testskript macht damit Sie einschätzen können, ob alles funktioniert hat. Das gilt sowohl für Spyder als auch für VS Code.
    
    Rechts in der Konsole wird als Erstes die TensorFlow-Version ausgegeben, z.\,B.:
    \begin{lstlisting}
    =========================
    Tensorflow Version 2.10.0
    =========================
    \end{lstlisting}
    TensorFlow lädt danach einmalig die benötigten Daten herunter und trainiert anschließend ein neuronales Netz. Dabei wird der Trainingsfortschritt angezeigt. Anschließend wird die Genauigkeit auf der Testmenge ausgegeben und Beispielbilder geplottet. Wenn das Testprogramm durchläuft, ist TensorFlow erfolgreich installiert.
    
    \end{preview}
    \end{document}
    
    
    % \begin{verbbox}
    % conda install -c anaconda tensorflow mypy pystan swig geopandas descartes tqdm ffmpeg
    % \end{verbbox}
    % \resizebox{\linewidth}{!}{\theverbbox}