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

anleitung_linux_openai-gym.tex

Blame
  • anleitung_linux_openai-gym.tex 14.94 KiB
    \RequirePackage{luatex85}
    \documentclass[12pt]{scrartcl}
    \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 auf Linux}
    \date{November 2024}
    \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{Miniforge}
    
    Zunächst installieren wir die Python-Distribution \textit{Miniforge}. 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/Miniforge3-Linux-x86_64.sh
      bash Miniforge3-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>/miniforge| verwenden oder, wenn Sie ihr Home-Verzeichnis etwas aufgeräumter lassen wollen, wählen Sie \lstinline|/home/<user>/.local/opt/miniforge|, z.\,B.\ so für den Benutzer \textit{john}:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize\color{gray}]
      Miniforge will now be installed into this location:
      /home/john/miniforge
    
        - Press ENTER to confirm the location
        - Press CTRL-C to abort the installation
        - Or specify a different location below
    
      [/home/john/miniforge] >>> #*\color{black}/home/john/.local/opt/miniforge*
    \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 Miniforge
      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-cpu| durch \lstinline|tensorflow-gpu| 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-cpu ipympl mypy jupyter pystan \
                         matplotlib seaborn scikit-learn openpyxl odfpy pyarrow \
                         geopandas descartes 'pyogrio<0.8.0' optuna plotly tqdm \
                         jax-jumpy moviepy shimmy-atari gymnasium-box2d spyder \
                         ipywidgets notebook lxml fastparquet zstandard gradio \
                         contextily networkx pyvis netgraph pip
    \end{lstlisting}
    
    Sie können die Umgebung jederzeit mit \lstinline|mamba activate ml| aktivieren und mit \lstinline|mamba deactivate| deaktivieren. Generell können Sie auch weitere Umgebungen mit \lstinline|mamba create -n <ENVNAME> <PAKETE>| einrichten und diese mit \lstinline|mamba activate <ENVNAME>| aktivieren.
    
    Installieren Sie nun in der Umgebung \lstinline|ml| noch Pakete, die es (noch) nicht in conda-forge gibt, sondern nur in PyPI (bzw.\ EMNIST auf PyPI ist veraltet und wir verwenden direkt die Version von github). 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 git+https://github.com/hosford42/EMNIST.git \
                                  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 -c nvidia -c conda-forge cuda-nvcc
    \end{lstlisting}
    
    
    \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}
    Alternativ können Sie auch die Desktop-Datei (\textattachfile{attachments/Spyder-ml.desktop}{Anhang}|\href{https://gitlab.cvh-server.de/ckaufmann/install-python-tensorflow-gym/-/raw/master/attachments/Spyder-ml.desktop?inline=false}{Web}) zum Starten per Doppelklick verwenden. Entfernen Sie ggf.\ die Dateiendung \texttt{.download}, sodass die Dateiendung \texttt{.desktop} lautet. Passen Sie darin noch den Pfad zum Icon an (Beispielbenutzername ist \texttt{john}) und machen Sie die Datei ausführbar. Kopieren Sie dann die Datei in Ihr Desktopverzeichnis (oft \lstinline|~/Schreibtisch/|). Wenn Sie Spyder zusätzlich zum Desktop auch im Startmenü sehen wollen, kopieren Sie die Datei noch nach \lstinline|~/.local/share/applications/|.
    
    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 Testprogramm \texttt{mnistKeras3.py} (\textattachfile{attachments/mnistKeras3.py}{Anhang}|\href{https://gitlab.cvh-server.de/ckaufmann/install-python-tensorflow-gym/-/raw/master/attachments/mnistKeras3.py?inline=false}{Web}).
    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 Testprogramm \texttt{mnistKeras3.py} (\textattachfile{attachments/mnistKeras3.py}{Anhang}|\href{https://gitlab.cvh-server.de/ckaufmann/install-python-tensorflow-gym/-/raw/master/attachments/mnistKeras3.py?inline=false}{Web}) und klicken in VS Code auf Open Folder um das darüberliegende Verzeichnis zu öffnen. Öffnen Sie dann die Datei \texttt{mnistKeras3.py}. Wie in der Abbildung dargestellt, installieren Sie die Python-Extension (Schritte 1–3) und wählen Sie den installierten Python-Interpreter (\lstinline|ml|) aus (Schritte 4–5). 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{\char`~/.local/opt/miniforge/envs/ml/bin/python}. Klicken Sie anschließend mit der rechten Maustaste irgendwo in das Editor-Fenster (Schritt 6):
    \vspace{-1em}
    
    \noindent
    \includegraphics[width=\linewidth]{images/vscode-python-extension-linux}
    \vspace{-1.5em}
    
    \noindent
    Klicken Sie nun im Kontext-Menü auf \textit{Run in Interactive Window} → \textit{Run Current File in Interactive Window}:
    \vspace{-0.5em}
    \begin{center}
      \includegraphics[width=0.95\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 werden als Erstes die TensorFlow- und Keras-Version ausgegeben, z.\,B.:
    \begin{lstlisting}
    =========================
    TensorFlow Version 2.17.0
    Keras Version      3.5.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}