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

anleitung_windows_openai-gym.tex

Blame
  • anleitung_windows_openai-gym.tex 12.47 KiB
    \RequirePackage{luatex85}
    \documentclass[12pt]{scrartcl}
    
    \usepackage[ngerman]{babel}
    \usepackage{verbatimbox}
    \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}
    \usetikzlibrary{shapes.arrows}
    
    \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{\keyshift}{\keystroke{Shift\,\tikz [baseline=-1mm, rounded corners=0pt] \node [draw, single arrow, single arrow head extend=0.1mm, rotate=90, inner sep=0.00mm, minimum size=2mm] {};}}
    
    \usepackage[colorlinks=true,urlcolor=blue,unicode=true]{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 Windows}
    \date{Mai 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}
    
    \edef\myindent{\the\parindent}% store parindent value
    
    % 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 Conda gezeigt. %Für Gymnasium ist die evtl.\ Installation eines MS C++-Compilers notwendig.
      Weiterhin wird die Installation von den Python-IDEs Spyder und Visual Studio Code gezeigt.
    \end{abstract}
    
    
    % %%%%% Mit dem Fork von OpenAI's atary-py https://github.com/Kojoley/atari-py ist ein Compiler unnötig.
    % %%%%% Falls wir auf ale-py https://github.com/mgbellemare/Arcade-Learning-Environment umsteigen, wird das wieder nötig.
    % \section{Installation C++-Build Tools}
    %
    % \begin{minipage}{0.44\linewidth}
    %   Zunächst installieren wir einen C++-Compiler, der später für OpenAI Gym benötigt wird.
    %   Dazu laden wir die Installationsdatei \texttt{vs\_BuildTools.exe} \href{https://aka.ms/vs/17/release/vs_BuildTools.exe}{hier} herunter. Im Download-Ordner und führen wir die Datei aus um den Visual Studio Installer zu starten. Bei der Auswahl der Komponenten setzen wir bei \textit{C++-Buildtools} einen Haken.
    % \end{minipage}%
    % \hfill%
    % \begin{minipage}{0.52\linewidth}
    %   \includegraphics[width=\linewidth]{images/vs installer}
    % \end{minipage}
    %
    % \begin{center}
    %   \includegraphics[width=0.6\linewidth]{images/haken c++ buildtools}
    % \end{center}
    % Rechts unten in demselben Fenster erscheint ein Button, mit dem man die Installation bestätigt und fortfährt. Wenn die Installation abgeschlossen ist, kann das Fenster geschlossen werden \textit{ohne} Visual Studio zu starten.
    
    
    
    \section{Mambaforge}
    
    Zunächst installieren wir die Python-Distribution \textit{Mambaforge}. Dazu laden wir zunächst die \href{https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Windows-x86_64.exe}{Installationsdatei} herunter. Führen Sie die Datei aus und folgen dann den Anweisungen des Installers. Wir empfehlen die Standardeinstellung, dass Miniconda für den Benutzer installiert wird (\textit{Just Me}), außer der Pfad enthält aufgrund des Benutzernamens Leerzeichen. In diesem seltenen Fall empfehlen wir die Installation als Administrator (\textit{All Users}). Wenn die Installation abgeschlossen ist, kann das Fenster geschlossen werden. Wir machen weiter mit \lstinline|mamba| auf der Kommandozeile.
    \medskip
    
    \noindent
    \begin{minipage}{0.7\linewidth}
      \setlength{\parindent}{\myindent}
      Um auf die Kommandozeile zu kommen, starten Sie den \textit{Miniforge Prompt} aus dem Startmenü. Falls Sie Anaconda als Administrator (\textit{All Users}) installiert haben, führen Sie mit einem Rechtsklick das Programm als Administrator aus.
    \end{minipage}%
    \hfill%
    \begin{minipage}{0.27\linewidth}
      \includegraphics[width=\linewidth]{images/mambaforge-start-menu-prompt}
    \end{minipage}%
    \medskip
    
    Nun sollte die \texttt{base}-Environment aktiviert sein, was Sie auch am Prompt erkennnen können:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      #*\color{gray}(base) C:\textbackslash Users\textbackslash john>*
    \end{lstlisting}
    
    
    
    \section{Conda-Umgebung}
    
    Wir erstellen nun eine Umgebung namens \lstinline|ml| mit Python 3.9 und den benötigten Paketen.
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      mamba create -n ml python=3.9 astunparse matplotlib scikit-learn seaborn ^
                         ipympl mypy jupyter notebook spyder gym-box2d gym-atari ^
                         openpyxl odfpy pyarrow geopandas pyogrio ^
                         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.
    
    Anschließend installieren wir noch Pakete mit \lstinline|pip| aus dem PyPI-Repository in der Umgebung \lstinline|ml|, die es im \lstinline|conda-forge|-Repository nicht gibt. Hierdurch können allerdings Probleme in Ihrer Umgebung entstehen.
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      #*\color{gray}(base) C:\textbackslash Users\textbackslash john>*mamba activate ml
      #*\color{gray}(ml) C:\textbackslash Users\textbackslash john>*pip install emnist autorom[accept-rom-license]
      #*\color{gray}(ml) C:\textbackslash Users\textbackslash john>*pip install tensorflow==2.10.1
    \end{lstlisting}
    
    Falls Sie eine NVIDIA GPU haben und den Support dafür aktivieren wollen, installieren Sie die folgenden Pakete:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      #*\color{gray}(ml) C:\textbackslash Users\textbackslash john>*mamba install cudatoolkit cudnn
    \end{lstlisting}
    und fügen auch den Pfad zu den entsprechenden Libraries (z.\,B.\ \textit{cudnn64\_8.dll}) in ihrer Benutzerumgebungsvariable \lstinline|Path| hinzu, besipielhaft:
    \begin{lstlisting}[gobble=2, basicstyle=\ttfamily\footnotesize]
      C:\Users\john\mambaforge\envs\ml\Library\bin
    \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 (bereits installiert, siehe Startmenü).
    
    \subsubsection*{Spyder}
    
    \begin{minipage}{0.7\linewidth}
      Spyder haben wir bereits innerhalb der Conda-Umgebung \lstinline|ml| installiert.
      \setlength{\parindent}{\myindent}
      Als nächstes starten wir Spyder und testen die Installation mit einem kleinen, neuronalen Netz, das lernt handgeschriebene Ziffern zu erkennen. Da Spyder nur in einer Conda-Umgebung (\lstinline|ml|) installiert wurde, gibt es auch nur einen einzigen Startmenü-Eintrag mit dem wir Spyder (ml) starten.
    \end{minipage}%
    \hfill%
    \begin{minipage}{0.27\linewidth}
      \includegraphics[width=\linewidth]{images/mambaforge-start-menu-spyder-ml}
    \end{minipage}%
    \medskip
    
    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{mnistKeras.py} (\textattachfile{attachments/mnistKeras.py}{Anhang}|\href{https://gitlab.cvh-server.de/ckaufmann/install-python-tensorflow-gym/-/raw/master/attachments/mnistKeras.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-windows}
    \vspace{-1.5em} % due to some transparent border in the image
    
    
    
    \subsubsection*{Visual Studio Code}
    
    VS Code wird unabhängig von Mamba installiert und man wählt nachträglich die Conda-Umgebung als Python-Interpreter aus.
    
    Laden Sie es \href{https://code.visualstudio.com/docs/?dv=win64user}{hier} herunter und installieren es. Anschließend öffnen Sie VS Code. In VS Code drücken Sie \keystroke{Ctrl}+\keyshift+\keystroke P, suchen Sie die Einstellung \textit{Terminal: Select Default Profile} und wählen Sie \textit{Command Prompt}.
    
    Speichern Sie das Testprogramm \texttt{mnistKeras.py} (\textattachfile{attachments/mnistKeras.py}{Anhang}|\href{https://gitlab.cvh-server.de/ckaufmann/install-python-tensorflow-gym/-/raw/master/attachments/mnistKeras.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{mnistKeras.py}. 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
    Im Kontext-Menü klicken Sie 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 wird als Erstes die TensorFlow-Version ausgegeben, z.\,B.:
    \begin{lstlisting}
    =========================
    Tensorflow Version 2.10.1
    =========================
    \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}