Technologieaustausch

Level 1: Grundkenntnisse von Linux

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Vorwort

Bei diesem Artikel handelt es sich um die Notizen zum dritten großen Modell-Übungscamp für Wissenschaftler, das vom Shanghai Artificial Intelligence Laboratory veranstaltet wird. Er dient nur als Referenz für Einzelpersonen und Lehrassistenten bei der Korrektur von Hausaufgaben.Original-Link zum Tutorial
Um sich anzumelden, suchen Sie bitte auf WeChat nach „The Third Scholar Model Practice Camp“.
Bei dieser Notiz handelt es sich um eine persönlich kommentierte Notiz, die auf der Grundlage des Original-Tutorials modifiziert wurde.

Linux+InternStudio-Level

😀Hello大家好,欢迎来到Scholar großes ModellPraxiscamp, hier ist ein vom Praxiscamp vorbereiteter Grundkurs für Studierende, die zum ersten Mal am Praxiscamp teilnehmen, und Studierende aus verschiedenen Branchen, die keine Grundkenntnisse in Linux haben. Hier bringen wir Ihnen den Umgang damit beiInternStudio-Entwicklungsmaschine, und beherrschen Sie einige GrundlagenLinux-Kenntnisse Damit nicht jeder weiß, wo er in den folgenden Kursen anfangen soll, hoffe ich, dass es für alle hilfreich ist. In den Level-Aufgaben haben wir hier einige Level-Aufgaben für Sie vorbereitet. Wenn Sie die erforderlichen Level-Aufgaben erledigen und einchecken, erhalten Sie die Rechenleistungsbelohnung des aktuellen Levels.Lasst uns beginnen!

1. Einführung in die InternStudio-Entwicklungsmaschine

InternStudio 是大模型时代下的云端算力平台。基于 InternLM 组织下的诸多算法库支持,为开发者提供开箱即用的大语言模型微调环境、工具、数据集,并完美兼容 🤗 HugginFace 开源生态。

Wenn Sie mehr über InternStudio erfahren möchten, können Sie sich die folgenden Dokumente ansehen: PraktikantStudio

https://studio.intern-ai.org.cn/

Öffnen Sie zunächst den Link oben, um InternStudio aufzurufen. Nach der Anmeldung gelangen Sie automatisch zur Konsolenoberfläche, wie in der folgenden Abbildung dargestellt:

Fügen Sie hier eine Bildbeschreibung ein

Lassen Sie mich Ihnen die Funktionen der Seiten erklären, die jeder Seriennummer entsprechen:

  1. Hier können Sie erstellenEntwicklungsmaschine, sowie die Konfiguration der Entwicklungsmaschine ändern und zugehörige Protokolle anzeigen usw.

Fügen Sie hier eine Bildbeschreibung ein

  1. OK hierVisualisierung Zeigen Sie die Dateien und Ordner auf der Entwicklungsmaschine an. Wenn Sie zwei Entwicklungsmaschinen erstellen, verwenden diese dieselbe Cloud-Festplatte. (Da es sich bei jeder Entwicklungsmaschine um einen Docker-Container handelt, wird eine Speicher-Cloud-Festplatte bereitgestellt. Erläuterungen zu Fachbegriffen finden Sie unter: Erläuterung der Fachbegriffe) Hier können Sie Dateien oder Ordner hochladen, Dateien erstellen und versteckte Dateien anzeigen.

Fügen Sie hier eine Bildbeschreibung ein

  1. Dies ist eine neue Funktion der Entwicklungsmaschine. Wenn Sie ein Projekt durchführen möchten, können Sie beim Assistenten Ressourcen beantragenGemeinsam genutzte Computerressourcen,避免造成资源浪费。(毕竟烧的可都是💴啊)
  2. Dies dient der KonfigurationSSH-Schlüssel, wir werden später darüber sprechen, wie man es verwendet.
  3. Der letzte Ort dient der Bearbeitung Ihrer persönlichen Daten und der Überprüfung IhrerRechenressourcenspezifische Verwendung.

Das Obige ist eine kurze Einführung in die InternStudio-Plattform. Schauen wir uns an, wie man eine Entwicklungsmaschine erstellt. Wir gehen auf die Homepage und klicken auf „.Erstellen Sie eine Entwicklungsmaschine

Fügen Sie hier eine Bildbeschreibung ein

Hier entscheiden wir uns für das ErstellenMaschine zur persönlichen Entwicklung, genanntprüfenCudaDie Version ist 12.2,RessourcenzuteilungWählen Sie 10 % und die Standarddauer ist in Ordnung.

Nachdem die Erstellung abgeschlossen ist, inEntwicklungsmaschineSie können die gerade erstellte Entwicklungsmaschine auf der Benutzeroberfläche sehen. Klicken Sie hier, um die Entwicklungsmaschine aufzurufen.

Fügen Sie hier eine Bildbeschreibung ein

Nach dem Aufrufen der Entwicklungsmaschine können Sie die Hauptseite der Entwicklungsmaschine sehen. Die Entwicklungsmaschine verfügt über drei Modi zur Auswahl:JupyterLab, Terminal und VScode

Fügen Sie hier eine Bildbeschreibung ein

In:

  1. JupyterLab: Eine interaktive Programmier- und Lehrumgebung mit integriertem Terminal, mit dem Sie problemlos Dateien anzeigen, Code ausführen usw. können.
  2. Terminal(Terminal, das leichteste): Wird hauptsächlich für Befehlszeilenoperationen oder das Ausführen von Skripts und einfachen Programmen verwendet
  3. VSCode: Der in die Webseite integrierte VSCode kann auch remote über eine SSH-Verbindung im lokalen VSCode entwickelt werden. Im Folgenden wird erläutert, wie die Remote-Verbindung konfiguriert wird.

Fügen Sie hier eine Bildbeschreibung ein

  1. Hierbei handelt es sich um eine Ressourcennutzung, die in nachfolgenden Kursen verwendet wird.

2. SSH- und Portzuordnung

Wir haben es oben vorgestelltInternStudio-Plattformund wie man eine Entwicklungsmaschine erstellt. In diesem Abschnitt wollen wir verstehen, wasSSHWarum eine Remote-Verbindung verwenden?, So verwenden Sie SSHFernverbindungEntwicklungsmaschine, was istPort-Mappingund wie es weitergehtPort-Mapping

2.1 Was ist SSH?

SSHDer vollständige Name lautet Secure Shell, was ins Chinesische als sichere Shell übersetzt wirdNetzwerksicherheitsprotokoll , sicheren Zugriff und Dateiübertragung sowie andere Dienste durch Verschlüsselungs- und Authentifizierungsmechanismen realisieren. Das SSH-Protokoll stellt sichere Netzwerkdienste in einer unsicheren Netzwerkumgebung bereit, indem es Netzwerkdaten verschlüsselt und authentifiziert.

SSH ist (C/S-Architektur) vonServerUndKlientUm einen sicheren SSH-Kanal einzurichten, müssen beide Parteien zunächst eine TCP-Verbindung herstellen, dann die Versionsnummer und verschiedene verwendete Algorithmen aushandeln und diese generierenSitzungsschlüssel wird für die anschließende symmetrische Verschlüsselung verwendet. Nach Abschluss der Benutzerauthentifizierung können beide Parteien eine Sitzung zum Datenaustausch aufbauen.

Dann werden wir es in der anschließenden Übung tunKonfigurieren Sie SSH-Schlüssel, der Konfigurationsschlüssel dient dazu, dass wir das Passwort nicht wiederholt eingeben müssen, wenn wir uns remote mit dem Entwicklungscomputer verbindenWarum eine Fernverbindung herstellen?

Der Vorteil einer Remote-Verbindung besteht darin, dass Sie bei Verwendung eines Remote-Büros über SSH eine Remote-Verbindung zum Entwicklungscomputer herstellen können, sodass Sie lokal entwickeln können. Und wenn Sie lokalen Code ausführen müssen und keine Umgebung haben, ist eine Remoteverbindung unbedingt erforderlich.

2.2 Wie verwende ich SSH, um eine Remoteverbindung zum Entwicklungscomputer herzustellen?

2.2.1 Passwort für SSH-Remoteverbindung verwenden

Zuerst verwenden wir die Methode zur Passworteingabe für die SSH-Remoteverbindung. Später werden wir darüber sprechen, wie man die passwortfreie Anmeldung konfiguriert.

Nachdem wir die Erstellung der Entwicklungsmaschine abgeschlossen haben, müssen wir das PowerShell-Terminal unseres Computers öffnen und verwendenWin+R Verwenden Sie die Tastenkombination, um das Ausführungsfeld zu öffnen, geben Sie PowerShell ein und öffnen Sie das PowerShell-Terminal. (Wenn Sie ein Linux- oder Mac-Betriebssystem verwenden, sind die folgenden Schritte gleich.)

Wir kehren zur Entwicklungsmaschinenplattform zurück und betretenEntwicklungsmaschineSuchen Sie auf der Seite nach der von uns erstellten Entwicklungsmaschine und klicken SieSSH-Verbindung

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

dann kopierenAnmeldebefehl37367 ist hier der von der Entwicklungsmaschine verwendete SSH-Port. Ohne diese Portnummer können Sie keine Verbindung zu SSH herstellen, und jeder Port ist unterschiedlich. Wenn Sie also eine Verbindung zur Entwicklungsmaschine herstellen, können Sie keine Verbindung herstellen , müssen Sie prüfen, ob der Port falsch ist.

Fügen Sie den kopierten Befehl in Powershell ein und drücken Sie die Eingabetaste. Hier müssen wir das Passwort eingeben. Wir kopieren das Passwort unter dem Anmeldebefehl und fügen es in das Terminal ein.Beachten Sie, dass Sie nach dem Kopieren des Kennworts mit der rechten Maustaste klicken müssen, um es einzufügen. Auf einigen Computern lautet die Shell-Tastenkombination zum Einfügenshift+ins, das hier eingefügte Passwort wird nicht angezeigt, das ist normal.

Drücken Sie abschließend die Eingabetaste und der folgende Inhalt wird angezeigt, der den Erfolg anzeigt:

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Nachdem wir eine Verbindung zur Entwicklungsmaschine hergestellt haben, können wir sie verwendenhostnameUm den Namen der Entwicklungsmaschine anzuzeigen, verwenden Sieuname -aUm die Kernelinformationen der Entwicklungsmaschine anzuzeigen, verwenden Sielsb_release -aUm Informationen zur Version der Entwicklungsmaschine anzuzeigen, verwenden Sienvidia-smiÜberprüfen Sie die GPU-Informationen. Wir werden später auf diese Befehle eingehen. Wenn Sie die Remote-Verbindung beenden möchten, geben Sie sie zweimal ein.exitDas ist es.

2.2.2 SSH-Schlüssel für SSH-Remoteverbindung konfigurieren

Wenn wir jedoch entwickeln und lernen, ist es schwierig, das Passwort jedes Mal aus der Ferne einzugeben. Wir können den SSH-Schlüssel so einstellen, dass der Schritt der Passworteingabe übersprungen wirdssh-keygenBefehl zum Generieren des Schlüssels

Der SSH-Schlüssel ist eine sichere und bequeme Anmeldeauthentifizierungsmethode, die zur Authentifizierung und verschlüsselten Kommunikation im SSH-Protokoll verwendet wird.

ssh-keygenUnterstützt sowohl RSA- als auch DSA-Authentifizierungsschlüssel.

Zu den häufig verwendeten Parametern gehören:

  • -t: Geben Sie den Schlüsseltyp an, z. B. dsa, ecdsa, ed25519, rsa.
  • -b: Geben Sie die Schlüssellänge an.
  • -C: Kommentare hinzufügen.
  • -f: Geben Sie den Dateinamen zum Speichern des Schlüssels an.
  • -i: Unverschlüsselte SSH-v2-kompatible private/öffentliche Schlüsseldateien lesen.

Hier verwenden wir den RSA-Algorithmus, um den Schlüssel zu generieren. Der Befehl lautet:

ssh-keygen -t rsa
  • 1

Nach Eingabe des BefehlsTreten Sie ganz einDas war's, der Schlüssel hier wird standardmäßig in generiert~/.ssh/unter dem Verzeichnis,~Es bedeutet das Home-Verzeichnis, wenn es Windows istC:Users{your_username} .Kann in PowerShell verwendet werdenGet-ContentBefehl zum Anzeigen des generierten Schlüssels, der verwendet werden kann, wenn es sich um ein Linux-Betriebssystem handeltcatBefehl.

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Dann kehren wir zur Entwicklungsmaschinenplattform zurück und klicken auf der Startseite auf KonfigurationSSH-Schlüssel, dann klickFügen Sie den öffentlichen SSH-Schlüssel hinzu

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Kopieren Sie den soeben generierten Schlüssel und fügen Sie ihn in das Feld für den öffentlichen Schlüssel ein. Klicken Sie abschließend auf „Jetzt hinzufügen“, und die Konfiguration des SSH-Schlüssels ist abgeschlossen.

Fügen Sie hier eine Bildbeschreibung ein

Starten Sie nach Abschluss der SSH-Schlüsselerstellung neuTerminalBei einer Remote-Verbindung wird der Schritt der Passworteingabe übersprungen.

2.2.3 Verwenden Sie VScode für die SSH-Remoteverbindung

Natürlich können Sie auch SSH-Remoteverbindungssoftware verwenden, wie zum Beispiel:Windterm, Xterminal Warten. Hier verwenden wir VScode für die Remoteverbindung. Der Vorteil der Verwendung von VScode besteht darin, dass es sich um einen Code-Editor handelt, der für Codeänderungen und andere Vorgänge sehr praktisch ist.

Wenn wir eine Remoteverbindung in VScode herstellen möchten, müssen wir auch eine Reihe von Plug-Ins installieren. Sie können online nach der Installation von VScode suchen. (Der vscode auf dem Entwicklungscomputer kann nicht nach diesem Plug-In suchen, der lokale vscode jedoch schon.)

Fügen Sie hier eine Bildbeschreibung ein

Wenn Sie VScode installiert haben, können Sie auf die Erweiterungsseite links klicken und „SSH“ in das Suchfeld eingeben. Das erste ist das Plug-in, das wir installieren möchten.

Fügen Sie hier eine Bildbeschreibung ein

Klicken Sie nach der Installation des Plug-Ins auf das Remoteverbindungssymbol in der Seitenleiste, klicken Sie in SSH auf die Schaltfläche „+“ und fügen Sie den Anmeldebefehl für die SSH-Verbindung des Entwicklungscomputers hinzu.

Fügen Sie hier eine Bildbeschreibung ein

Wir kopieren den Anmeldebefehl, fügen den Befehl dann in das Popup-Fenster ein und drücken schließlich die Eingabetaste:

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Die Standardkonfigurationsdatei ist in Ordnung. Sie können sie natürlich auch anpassen. Im Folgenden finden Sie den spezifischen Inhalt der Konfigurationsdatei: (Dazu gehören alle Ihre Remote-Verbindungsinformationen.)

Host ssh.intern-ai.org.cn #主机ip也可以是域名
  HostName ssh.intern-ai.org.cn #主机名
  Port 37367 #主机的SSH端口
  User root #登录SSH使用的用户
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Wenn Sie einige der folgenden Konfigurationsoptionen manuell hinzufügen möchten, müssen Sie die entsprechenden Teile gemäß dem oben genannten Format ändern.

Wenn *StrictHostKeyChecking noUndUserKnownHostsFile* /dev/nullLöschen Sie das Popup-Fenster, das zur Überprüfung des Fingerabdrucks angezeigt wird:

Fügen Sie hier eine Bildbeschreibung ein

StrictHostKeyChecking no Zeigt an, dass die strenge Überprüfung des Hostschlüssels deaktiviert ist. Dies bedeutet, dass beim Herstellen einer Verbindung zu einem neuen SSH-Server der Hostschlüssel des Servers nicht streng überprüft wird, was ein gewisses Sicherheitsrisiko darstellen kann.

UserKnownHostsFile /dev/nullEs setzt die dem Benutzer bekannte Host-Schlüsseldatei auf /dev/null, wodurch die Aufzeichnung und Verwendung bekannter Host-Schlüssel im Wesentlichen ignoriert wird.

Im Rahmen der allgemeinen Sicherheitspraxis wird jedoch nicht empfohlen, die strenge Überprüfung des Hostschlüssels willkürlich zu deaktivieren.

Klicken Sie dann im Eingabeaufforderungsfenster, das in der unteren rechten Ecke angezeigt wird, auf „Verbinden“, um eine Remoteverbindung zum Entwicklungscomputer herzustellen.

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Nachdem die Remote-Verbindung hergestellt wurde, können Sie den zu öffnenden Ordner auswählen, der auch als Arbeitsverzeichnis bezeichnet werden kann. Sie können den Ordner auf dem Entwicklungscomputer oder den lokalen Ordner auswählen.Cloud-Disk

Wenn Sie das nächste Mal eine Remote-Verbindung herstellen, müssen Sie keine Anmeldebefehle und andere Informationen eingeben. Sie müssen lediglich die Remote-Verbindung von vscode öffnen, um die Entwicklungsmaschineninformationen der ersten Verbindung anzuzeigenrootDies bedeutet, dass wir beim ersten Herstellen einer Verbindung mit der Entwicklungsmaschine Folgendes verwenden/rootArbeitsliste.

Fügen Sie hier eine Bildbeschreibung ein

Und im Bild unten->Zeigt an, dass Sie das Arbeitsverzeichnis nach dem Aufrufen des Entwicklungscomputers erneut auswählen müssen:

Fügen Sie hier eine Bildbeschreibung ein

Und im Bild unten->Zeigt den Zugriff auf das Arbeitsverzeichnis an, das von der letzten Entwicklungsmaschine ausgewählt wurde:

Fügen Sie hier eine Bildbeschreibung ein

Das jeweils ausgewählte Arbeitsverzeichnis wird unter den Informationen zur Entwicklungsmaschine angezeigt: (Hier gibt es ein zusätzliches Arbeitsverzeichnis für lagent)

Fügen Sie hier eine Bildbeschreibung ein

Als nächstes werden wir vorstellen, wannPort-Mapping

2.3. Portzuordnung

2.3.1 Was ist Port-Mapping?

Port-Mapping Es handelt sich um eine Netzwerktechnologie, die jeden Port im externen Netzwerk dem entsprechenden Port im internen Netzwerk zuordnen kann, um die Kommunikation zwischen dem internen Netzwerk und dem externen Netzwerk zu realisieren. Durch Port-Mapping kann auf Dienste oder Anwendungen im Intranet vom externen Netzwerk aus zugegriffen werden, um eine bequeme Kommunikation über das Netzwerk zu erreichen.

Warum müssen wir also eine Portzuordnung durchführen, wenn wir eine Entwicklungsmaschine verwenden?

Denn in den Folgekursen führen wir Modelle durchweb_demo In der Bereitstellungspraxis werden Sie während dieses Prozesses wahrscheinlich auf das Problem eines unvollständigen Ladens der Web-Benutzeroberfläche stoßen.Dies liegt daran, dass beim Ausführen von web_demo in der Web-IDE des Entwicklungscomputers beim direkten Zugriff auf den http/https-Dienst im Entwicklungscomputer möglicherweise Proxy-Probleme auftreten.UI-RessourcenNicht vollständig geladen.

Um dieses Problem zu lösen, müssen wir die Verbindung, auf der web_demo ausgeführt wird, portierenExterne Netzwerkverbindungen werden unserem lokalen Host zugeordnet , verwenden wir den lokalen Verbindungszugriff, um dieses Proxy-Problem zu lösen. Lass es uns jetzt üben.

Fügen Sie hier eine Bildbeschreibung ein

Lassen Sie uns zunächst anhand eines Diagramms verstehen, wie die Portzuordnung der Entwicklungsmaschine funktioniert:

Im Folgenden finden Sie praktische Schritte zum Durchführen der Portzuordnung.

ssh -p 37367 [email protected] -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
  • 1

Das Obige ist ein Portzuordnungsbefehl. Führen Sie diesen Befehl auf dem Host aus. Hier ist ein Flussdiagramm, um den Prozess der Portzuordnung zu verstehen:

Fügen Sie hier eine Bildbeschreibung ein

Der persönliche PC stellt eine Remote-Verbindung zum einzigen offengelegten Port 37367 des Entwicklungscomputers her (dies wird während SSH erwähnt, und der offengelegte Port jedes Entwicklungscomputers ist unterschiedlich) und legt die Tunneloptionen fest. Der exponierte Hafen dient als Durchgangsstation für den Weiterleitungsverkehr.

  • -C: Komprimierung aktivieren, um die übertragene Datenmenge zu reduzieren.
  • -N: Führt keine Remote-Befehle aus, baut nur Tunnel auf.
  • -g: Remote-Hosts erlauben, sich mit lokal weitergeleiteten Ports zu verbinden.

Wenn dieser SSH-Befehl auf einem persönlichen PC ausgeführt wird, überwacht der SSH-Client Port 7860 des lokalen Computers.

Jeglicher Datenverkehr, der an den lokalen Port 7860 gesendet wird, wird vom SSH-Tunnel an Port 7860 auf der Adresse 127.0.0.1 des Remote-Servers weitergeleitet.

Dies bedeutet, dass wir über diesen Tunnel sicher auf Dienste auf dem Remote-Server zugreifen können, auch wenn dieser Port des Entwicklungscomputers nicht direkt mit dem externen Netzwerk verbunden ist. .

2.3.2 Wie führe ich eine Portzuordnung durch?
2.3.2.1 Verwenden Sie den SSH-Befehl für die Portzuordnung

Wir gehen immer noch zur Schnittstelle der Entwicklungsmaschine, suchen unsere Entwicklungsmaschine und klickenKundendienste, kopiere den ersten Befehl,
Fügen Sie hier eine Bildbeschreibung ein

ssh -p 37367 [email protected] -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no
  • 1

Lassen Sie uns ihm die Bedeutung jedes Teils des Befehls vorstellen:

  • -p 37367: Gibt den Port für die SSH-Verbindung auf 37367 an, der bereits erwähnt wurde.
  • [email protected]: Zeigt die Verwendung an root Benutzeridentität stellt eine Verbindung herssh.intern-ai.org.cn dieser Gastgeber.
  • -CNg
    • -C Wird normalerweise verwendet, um die Komprimierung zu aktivieren.
    • -N Zeigt an, dass keine Remote-Befehle ausgeführt werden, sondern nur Verbindungen zur Portweiterleitung usw. aufgebaut werden.
    • -g Erlauben Sie Remote-Hosts, eine Verbindung zu lokal weitergeleiteten Ports herzustellen.
  • -L {本地机器_PORT}:127.0.0.1:{开发机_PORT}: Hiermit wird die lokale Portweiterleitung eingerichtet, um den angegebenen Port des lokalen Computers weiterzuleiten (von {本地机器_PORT} darstellt) an den Remote-Host weitergeleitet (hier d.h.ssh.intern-ai.org.cn)von 127.0.0.1 (d. h. die lokale Loopback-Adresse) und der angegebene Port der Entwicklungsmaschine (definiert durch{开发机_PORT} äußern).
  • -o StrictHostKeyChecking=no: Deaktivieren Sie die strikte Überprüfung des Hostschlüssels, um beim ersten Herstellen einer Verbindung Eingabeaufforderungen oder Fehler aufgrund unbekannter Hostschlüssel zu vermeiden.

Wenn Sie eine Webdemo ausführen, können Sie mit diesem Befehl beispielsweise eine Portzuordnung durchführen:

Wir erstellen eine Datei „hello_world.py“ (klicken Sie mit der rechten Maustaste auf die Benutzeroberfläche der Entwicklungsmaschine, um die Datei zu erstellen und ändern Sie den Namen in „hello_world.py“) und geben Sie den folgenden Inhalt in die Datei ein:

import socket
import re
import gradio as gr
 
# 获取主机名
def get_hostname():
    hostname = socket.gethostname()
    match = re.search(r'-(d+)$', hostname)
    name = match.group(1)
    
    return name
 
# 创建 Gradio 界面
with gr.Blocks(gr.themes.Soft()) as demo:
    html_code = f"""
            <p align="center">
            <a href="https://intern-ai.org.cn/home">
                <img src="https://intern-ai.org.cn/assets/headerLogo-4ea34f23.svg" alt="Logo" width="20%" style="border-radius: 5px;">
            </a>
            </p>
            <h1 style="text-align: center;">☁️ Welcome {get_hostname()} user, welcome to the ShuSheng LLM Practical Camp Course!</h1>
            <h2 style="text-align: center;">😀 Let’s go on a journey through ShuSheng Island together.</h2>
            <p align="center">
                <a href="https://github.com/InternLM/Tutorial/blob/camp3">
                    <img src="https://oss.lingkongstudy.com.cn/blog/202406301604074.jpg" alt="Logo" width="20%" style="border-radius: 5px;">
                </a>
            </p>

            """
    gr.Markdown(html_code)

demo.launch()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

Denken Sie nach der Bearbeitung daranctrl+sspeichern

Bevor Sie den Code ausführen, müssen Sie ihn verwendenpip install gradio==4.29.0Befehl zum Installieren der folgenden Abhängigkeitspakete (kopieren Sie den Befehl und fügen Sie ihn in das Terminal ein) und führen Sie dann eines im Terminal der Web-IDE auspython hello_world.pyBefehl

Fügen Sie hier eine Bildbeschreibung ein

Wenn keine Portzuordnung durchgeführt wird, kann nicht über die lokale IP darauf zugegriffen werden.

Fügen Sie hier eine Bildbeschreibung ein

Ich kann dies mit dem folgenden Befehl in PowerShell eingeben:

ssh -p 37367 [email protected] -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
  • 1

Fügen Sie hier eine Bildbeschreibung ein

Das bedeutet Erfolg. (Beachten: Dieser Befehl gibt keinen Inhalt zurück, was bedeutet, dass die Portzuordnung ausgeführt wird und Sie dann die Web-UI-Schnittstelle sehen können, indem Sie die Verbindung auf der Webseite öffnen.)

Fügen Sie hier eine Bildbeschreibung ein

2.3.2.2 Verwenden Sie vscode für die Portzuordnung

Wenn wir verschiedene Web-Benutzeroberflächen ausführen, müssen wir natürlich wiederholt Befehle eingeben, was sehr mühsam ist, und wir müssen VScode verwenden.Wir haben die Entwicklungsmaschine remote über SSH verbunden. Wir müssen sie nicht manuell konfigurieren. Wir können die Tastenkombination „Strg+Umschalt+~“ verwenden.Wecken Sie das Terminal auf, die Portoptionen finden Sie auf der rechten Seite des Terminals:

Fügen Sie hier eine Bildbeschreibung ein

Hier können Sie die Portzuordnungsinformationen anzeigen. Wenn Sie den Port ändern müssen, können Sie die Portnummer in der Portspalte ändern.

3. Grundlegende Linux-Befehle

In diesem Teil werde ich Sie dazu bringen, etwas von Linux zu verstehenGrundoperationen , und verwenden Sie einige Werkzeuge. Damit jeder es selbst lösen kann, wenn er auf Probleme stößt, können Sie hier auch einen Kommentar abgeben und ich werde Ihnen rechtzeitig antworten.

weil wir es verwendenEntwicklungsmaschinekaum benutztAutoritätsverwaltung , also werden wir es nicht vorstellen. (Die folgenden Vorgänge werden alle im VScode-Terminal ausgeführt.)

3.1 Dateiverwaltung

Unter Linux gehören zu den gängigen Dateiverwaltungsvorgängen:

  • Erstellen Sie eine Datei:Kann benutzen touch Der Befehl erstellt eine leere Datei.
  • Erstellen Sie ein Verzeichnis:verwenden mkdir Befehl.
  • Verzeichniswechsel:verwendencdBefehl.
  • Verzeichnis anzeigen:verwendenpwdBefehl.
  • Dateiinhalte anzeigen: Falls gebraucht cat Den gesamten Inhalt der Datei direkt anzeigen,more Undless Kann in Seiten angezeigt werden.
  • Datei bearbeiten:wie vi odervim Warten Sie auf den Herausgeber.
  • Dateien kopieren:verwenden cp Befehl.
  • Dateilink erstellen:verwendenlnBefehl.
  • Dateien verschieben:passieren mv Befehl.
  • Dateien löschen:verwenden rm Befehl.
  • Verzeichnis löschenrmdir(Es können nur leere Verzeichnisse gelöscht werden) oder rm -r(Nicht leere Verzeichnisse können gelöscht werden).
  • Dateien finden:Kann benutzen find Befehl.
  • Details einer Datei oder eines Verzeichnisses anzeigen:verwendenlsBefehl, z. B. using ls -lDetaillierte Informationen zu Dateien in einem Verzeichnis anzeigen.
  • Dateien verarbeiten: Für komplexe Dateioperationen können Sie verwendensedBefehl.

Hier sind einige Befehle, die wir im Kurs verwenden werden:

3.1.1 berühren

Mithilfe von Touch können wir schnell Dateien erstellen, sodass wir nicht manuell klicken müssen, um sie zu erstellen.Zum Beispiel möchten wir eine erstellendemo.pydokumentieren:

3.1.2 mkdir

Auf die gleiche Weise, wenn Sie eine Datei mit dem Namen erstellen möchtentestVerzeichnis:

Fügen Sie hier eine Bildbeschreibung ein

3.1.3 CD

Dieser Befehl ist der am häufigsten verwendete Befehl. Bevor Sie ihn verwenden, müssen Sie Schülern ohne Computerkenntnisse die Verzeichnisstruktur erklären und ein für alle verständliches Bild zeichnen:

Fügen Sie hier eine Bildbeschreibung ein

Was wir jetzt verwenden, istrootVerzeichnis, das auch das Home-Verzeichnis des Root-Benutzers ist.~, im Linux-Betriebssystem/Stellt das Stammverzeichnis dar. Es gibt viele Verzeichnisse und Dateien, die das System im Stammverzeichnis benötigtrootVerzeichnis, darunter.Stellt das aktuelle Verzeichnis dar,.. Das dargestellte übergeordnete Verzeichnis.Wenn ich jetzt eintreten würdetestVerzeichnis und kehren Sie dann zu zurückrootVerzeichnis, wir können dies tun:

3.1.4 Passwort

wir können benutzenpwdBefehl zum Anzeigen des aktuellen Verzeichnisses: Dadurch können wir leichter feststellen, in welchem ​​Verzeichnis wir uns gerade befinden.

Fügen Sie hier eine Bildbeschreibung ein

3.1.5 Katze

catDer Befehl kann den Inhalt der Datei anzeigen und es können weitere Befehle verwendet werden--helpBefehl zum Anzeigen:

  • -a, --show-all entspricht -vET
  • -b, –number-non blank Anzahl der nicht leeren Ausgabezeilen, überschreibt -n
  • -e, entspricht -vE
  • -E, --show -end zeigt $ am Ende jeder Zeile an
  • -n, --number nummeriert alle Ausgabezeilen
  • -s, --crick-blank unterdrückt wiederholt leere Ausgabezeilen
  • -t ist äquivalent zu -vT
  • -t, --show-tabs zeigt Tabulatorzeichen als ^I an
  • -v, --show nicht-druckend verwendet ^- und M-Notation, außer LFD und TAB
3.1.6 vi oder vim

Wir können es verwenden, wenn wir Dateien bearbeiten müssenviodervimWenn Sie mit dem Befehl Dateibearbeitung beginnen, gibt es drei Modi:

Fügen Sie hier eine Bildbeschreibung ein

Rufen Sie den Bearbeitungsmodus auf, um ihn zu verwendeniDer Vorteil von vim besteht darin, dass Sie im Terminal einfache Dateiänderungen vornehmen können.

3.1.7 cp und ln (Hervorhebung)

**cp**Der Befehl wird in den folgenden Kursen häufig verwendet. Er wird zum Kopieren einer Datei oder eines Verzeichnisses in ein anderes Verzeichnis verwendet.

  • Dateien kopieren:cp 源文件 目标文件
  • Verzeichnis kopieren:cp -r 源目录 目标目录

Wenn wir jedoch das Modell verwenden möchten, nimmt dieser Vorgang viel Speicherplatz in Anspruch, sodass wir ihn im Allgemeinen verwendenln Befehl, dies ist dasselbe wie die Windows-Verknüpfung. Unter Linux gibt es zwei Arten von Links:Harter Link(fester Link)mitSoftlink (symbolischer Link), ein Hardlink bedeutet, dass eine Datei mehrere Namen haben kann, während ein Softlink eine spezielle Datei generiert, deren Inhalt auf den Speicherort einer anderen Datei verweist. Hardlinks existieren im selben Dateisystem, Softlinks können sich jedoch über verschiedene Dateisysteme erstrecken.

Daher verwenden wir im Allgemeinen weiche Verbindungen. Die üblichen Verwendungsmethoden sind wie folgt:

ln [参数][源文件或目录][目标文件或目录]
  • 1

Die Parameter sind wie folgt:

  • -s: Das Erstellen von Softlinks (symbolischen Links) wird ebenfalls am häufigsten verwendet.
  • -f: Ausführung erzwingen, vorhandene Zieldateien überschreiben;
  • -i: Interaktiver Modus. Wenn die Datei vorhanden ist, wird der Benutzer gefragt, ob sie überschrieben werden soll.
  • -n: symbolische Links als allgemeine Verzeichnisse behandeln;
  • -v: Detaillierte Verarbeitung anzeigen.
3.1.8 mv und rm

mvBefehl undrmDie Befehle werden auf ähnliche Weise verwendet, jedochmvEs dient zum Verschieben von Dateien oder Verzeichnissen und kann auch umbenannt werden.rmDer Befehl dient zum Löschen von Dateien oder Verzeichnissen.

Häufig verwendete Methoden sind wie folgt:

  • mv-Befehl

Häufig verwendete Parameter:

  • -i: Interaktiver Modus, fragen Sie vor dem Überschreiben.
  • -f: Abdeckung erzwingen.
  • -u: Nur verschieben, wenn die Quelldatei neuer als die Zieldatei ist.

Anwendungsbeispiel:

  • mv file1.txt dir1/: Datei verschieben file1.txt In Verzeichnis verschiebendir1 Mitte.

  • mv file1.txt file2.txt: Datei verschieben file1.txt Umbenennen infile2.txt

  • rm-Befehl

Häufig verwendete Parameter:

  • -i: Interaktiver Modus, fragen Sie vor dem Löschen.
  • -f: Erzwungenes Löschen, Ignorieren nicht vorhandener Dateien, ohne Aufforderung zur Bestätigung.
  • -r:Rekursiv ein Verzeichnis und seinen Inhalt löschen.

Anwendungsbeispiel:

  • rm file.txt:Dateien löschen file.txt
  • rm -r dir1/: Verzeichnisse rekursiv löschen dir1 und all seine Inhalte.

Der Befehl zum Löschen eines Verzeichnisses kann ebenfalls verwendet werdenrmdir

3.1.9 finden

findDer Befehl ist ein leistungsstarkes Dateisuchtool im Linux-System. Er kann Dateien oder Verzeichnisse finden, die die Bedingungen im angegebenen Verzeichnis und seinen Unterverzeichnissen erfüllen, und entsprechende Vorgänge ausführen.

Das Folgende istfindEinige häufige Verwendungen des Befehls:

  1. Nach Dateinamen suchen:verwenden-name Option zum Suchen von Dateien nach Dateinamen. Zum Beispiel,find /path/to/directory -name "file.txt"durchsucht das angegebene Verzeichnis und seine benannten Unterverzeichnissefile.txtdokumentieren.
  2. Nach Dateityp suchen:verwenden-type Option zum Suchen von Dateien nach Dateityp. Zum Beispiel,find /path/to/directory -type fAlle gewöhnlichen Dateien im angegebenen Verzeichnis und seinen Unterverzeichnissen werden gefunden.
  3. Suchen Sie nach Dateigröße:verwenden-size Option zum Suchen von Dateien nach Dateigröße. Zum Beispiel,find /path/to/directory -size +100MFindet Dateien, die größer als 100 MB sind, im angegebenen Verzeichnis und seinen Unterverzeichnissen.
  4. Suche nach Änderungszeit:verwenden-mtime-atimeoder-ctime Optionen finden Dateien anhand ihrer Änderungszeit, Zugriffszeit oder Statusänderungszeit. Zum Beispiel,find /path/to/directory -mtime -7Findet Dateien im angegebenen Verzeichnis und seinen Unterverzeichnissen, die innerhalb von 7 Tagen geändert wurden.
  5. Suchen Sie nach Dateiberechtigungen:verwenden-perm Option zum Suchen von Dateien basierend auf Dateiberechtigungen. Zum Beispiel,find /path/to/directory -perm 755Findet Dateien mit der Berechtigung 755 im angegebenen Verzeichnis und seinen Unterverzeichnissen.
  6. Suchen Sie nach Benutzer oder Gruppe:verwenden-useroder-group Optionen finden Dateien nach ihrem Besitzer oder ihrer Gruppe. Zum Beispiel,find /path/to/directory -user usernameDurchsucht das angegebene Verzeichnis und seine Unterverzeichnisse, die dem Benutzer gehörenusernamedokumentieren.
  7. Operationen durchführen:verwenden-exec Optionen können entsprechende Operationen an den gefundenen Dateien durchführen. Zum Beispiel,find /path/to/directory -name "*.txt" -exec rm {} ;löscht alle gefundenen Dateien, die mit enden.txtDatei am Ende.
3.1.10 ls

lsDer Befehl kann auch zum Auflisten des Inhalts eines Verzeichnisses verwendet werdenEinzelheiten

Häufig verwendete Parameter und Verwendungsmethoden sind wie folgt:

  • -a: Alle Dateien und Verzeichnisse anzeigen, einschließlich versteckter Dateien (darüber hinaus)..Datei oder Verzeichnis, die mit . beginnt).
  • -l: Zeigt detaillierte Informationen im Langformat an, einschließlich Dateiberechtigungen, Eigentümer, Größe, Änderungszeit usw.
  • -h:Und-lWird in Kombination verwendet, um die Dateigröße in einer für Menschen lesbaren Weise anzuzeigen (z. B.KMGWarten).
  • -R: Den Inhalt von Unterverzeichnissen rekursiv auflisten.
  • -t : Anzeige in der Reihenfolge der Dateiänderungszeit. ,

Fügen Sie hier eine Bildbeschreibung ein

3.1.11 sed

sedCommand ist ein Stream-Editor, der hauptsächlich für die Textverarbeitung verwendet wird. Er wird häufig bei der Verarbeitung komplexer Dateioperationen verwendet.sedHäufig verwendete Parameter und Anwendungsbeispiele für Befehle sind wie folgt:

  • Parameterbeschreibung:
    • -e<script> oder--expression=<script>: Geben Sie Skripte direkt in der Befehlszeile für die Textverarbeitung an.
    • -f<script文件> oder--file=<script文件>: Liest das Skript aus der angegebenen Skriptdatei zur Textverarbeitung.
    • -n oder--quiet oder--silent: Drucken Sie nur die vom Skript verarbeiteten Ausgabeergebnisse und keine nicht übereinstimmenden Zeilen.
  • Aktionsbeschreibung:
    • a: Fügen Sie die angegebene Textzeichenfolge zur nächsten Zeile der aktuellen Zeile hinzu.
    • c: Ersetzt den angegebenen Zeilenbereich durch die angegebene Textzeichenfolge.
    • d: Die angegebene Zeile löschen.
    • i: Fügen Sie die angegebene Textzeichenfolge zur vorherigen Zeile der aktuellen Zeile hinzu.
    • p : Die ausgewählten Zeilen drucken.normalerweise mit-n Zusammen mit den Parametern werden nur passende Zeilen gedruckt.
    • s : Verwenden Sie reguläre Ausdrücke zum Ersetzen von Text. Zum Beispiel,s/old/new/g Ersetzen Sie alle „InternLM“ durch „InternLM yyds“.
  • Beispiel:

Fügen Sie hier eine Bildbeschreibung ein

im Beispiel verwendetechoBefehl, dies ist das gleiche wie in PythonprintDas Gleiche wird zum Drucken von Inhalten verwendet. Verwenden Sie hier das Pipe-Zeichen>Drucken Sie InternLM in eine Dateidatei. Zu den häufig verwendeten Pipe-Zeichen gehören<Und|, zum Beispiel können wir verwendengrepBefehl zum Anzeigen der installierten Includes in PythonosFeldpaket:

Fügen Sie hier eine Bildbeschreibung ein

grep Ist ein leistungsstarkes Textsuchtool. Häufig verwendete Parameter sind wie folgt:

  • -i: Suche unabhängig von der Groß-/Kleinschreibung.
  • -v: Kehrt die Übereinstimmung um, d. h. es werden nicht übereinstimmende Zeilen angezeigt.
  • -n: Zeilennummer anzeigen.
  • -c: Zählen Sie die Anzahl der übereinstimmenden Zeilen.

3.2 Prozessmanagement

ProzessmanagementBefehle sind wichtige Werkzeuge zur Systemüberwachung und Prozessverwaltung. Zu den häufig verwendeten Prozessverwaltungsbefehlen gehören:

  • ps: Laufende Prozesse anzeigen
  • Spitze:Dynamische Anzeige laufender Prozesse
  • pstree: Laufende Prozesse in der Baumansicht anzeigen
  • pgrep: Wird verwendet, um Prozesse zu finden
  • Hübsch:Ändern Sie die Priorität eines Prozesses
  • Arbeitsplätze: Prozessbezogene Informationen anzeigen
  • bg und fg: Verschieben Sie den Prozess in den Hintergrund
  • töten: Tötungsprozess

Es gibt auch einen speziellen Befehl in der Entwicklungsmaschinenvidia-smi , ein Befehlszeilentool für die NVIDIA-Systemverwaltungsschnittstelle, das zur Überwachung und Verwaltung von NVIDIA-GPU-Geräten verwendet wird. Es bietet eine schnelle Möglichkeit, Informationen wie GPU-Status, Nutzung, Temperatur, Speichernutzung, Stromverbrauch und auf der GPU ausgeführte Prozesse anzuzeigen.

Im Folgenden finden Sie Beispiele für die Verwendung jedes Befehls:

  • ps : Listen Sie die Prozesse im aktuellen System auf. Verschiedene Prozessinformationen können mit verschiedenen Optionen angezeigt werden, wie zum Beispiel:
    • ps aux  # 显示系统所有进程的详细信息
      
      • 1
  • top : Den Status von Prozessen im System dynamisch anzeigen. Es aktualisiert die Prozessliste in Echtzeit und zeigt die Prozesse mit der höchsten CPU- und Speicherauslastung an.
    • top  # 启动top命令,动态显示进程信息
      
      • 1
  • pstree: Zeigt die aktuell ausgeführten Prozesse und ihre Eltern-Kind-Beziehungen in Form eines Baumdiagramms an.
    • pstree  # 显示进程树
      
      • 1
  • pgrep : Finden Sie Prozesse, die den Kriterien entsprechen. Sie können anhand des Prozessnamens, des Benutzers und anderer Bedingungen nach Prozessen suchen.
    • pgrep -u username  # 查找特定用户的所有进程
      
      • 1
  • nice: Ändern Sie die Priorität eines Prozesses.nice Je niedriger der Wert, desto höher ist die Prozesspriorität.
    • nice -n 10 long-running-command  # 以较低优先级运行一个长时间运行的命令
      
      • 1
  • jobs: Zeigt eine Liste der Jobs in der aktuellen Terminalsitzung an, einschließlich der im Hintergrund laufenden Prozesse.
    • jobs  # 列出当前会话的后台作业
      
      • 1
  • bg Undfgbg Lassen Sie den angehaltenen Prozess im Hintergrund laufen.fg Bringen Sie den Hintergrundprozess wieder in den Vordergrund.
    • bg  # 将最近一个挂起的作业放到后台运行
      fg  # 将后台作业调到前台运行
      
      • 1
      • 2
  • kill: Senden Sie ein Signal an den angegebenen Prozess, der normalerweise zum Beenden des Prozesses verwendet wird.
    • kill PID  # 杀死指定的进程ID
      
      • 1
    • Beachten,kill Der Befehl wird standardmäßig gesendetSIGTERM Signal, das verwendet werden kann, wenn der Prozess nicht reagiert-9verwendenSIGKILL Signal bricht den Prozess gewaltsam ab:

    • kill -9 PID  # 强制杀死进程    
      
      • 1

SIGTERM Das Signal (Signal Termination) ist ein Standardsignal, das in Unix und Unix-ähnlichen Betriebssystemen verwendet wird, um die Beendigung eines Prozesses anzufordern. Dieses Signal wird normalerweise gesendet, wenn das System oder der Benutzer einen Prozess ordnungsgemäß herunterfahren möchte.UndSIGKILLDie Signale sind unterschiedlich,SIGTERM Signale können von einem Prozess abgefangen und verarbeitet werden, sodass der Prozess vor dem Beenden bereinigt werden kann. (aus dem Internet)

Das Folgende ist nvidia-smi Einige grundlegende Befehlsverwendungen von Befehlen:

  • Zusammenfassende Informationen zum GPU-Status anzeigen:
    • nvidia-smi
      
      • 1
  • Detaillierte GPU-Statusinformationen anzeigen:
    • nvidia-smi -l 1
      
      • 1
    • Dieser Befehl aktualisiert die Statusinformationen jede Sekunde.

  • GPU-Nutzungsverlauf anzeigen:
    • nvidia-smi -h
      
      • 1
  • Listen Sie alle GPUs auf und zeigen Sie ihre PIDs und Prozessnamen an:
    • nvidia-smi pmon
      
      • 1
  • Beenden Sie den angegebenen GPU-Prozess zwangsweise:
    • nvidia-smi --id=0 --ex_pid=12345
      
      • 1
    • Dadurch wird der Prozess mit PID 12345 auf GPU-ID 0 zwangsweise beendet.

  • GPU-Leistungsmodus festlegen:
    • nvidia-smi -pm 1
      nvidia-smi -i 0 -pm 1
      
      • 1
      • 2
    • Der erste Befehl versetzt alle GPUs in den Leistungsmodus, der zweite Befehl zielt nur auf die GPU mit der ID 0 ab.

  • Starten Sie die GPU neu:
    • nvidia-smi --id=0 -r
      
      • 1
    • Dadurch wird die GPU mit der ID 0 neu gestartet.

  • Hilfeinformationen anzeigen:
    • nvidia-smi -h
      
      • 1

Das Folgende ist eine Einführung in GPU-Informationen anhand eines Bildes:

Fügen Sie hier eine Bildbeschreibung ein

3.3 Werkzeugnutzung

Hier ist ein WerkzeugTMUXTMUX ist ein Terminal-Multiplexer. Es macht es einfach, zwischen mehreren Terminals zu wechseln, sie zu trennen (die Terminals werden dadurch nicht zerstört, sie laufen im Hintergrund weiter) und sie wieder mit anderen Terminals zu verbinden. Warum dieses Tool einführen?Weil es später gemacht wirdXtunerDie Feinabstimmung des Modells dauert langeTmuxEs kann die Situation lösen, in der das Programm beendet und unterbrochen wird. Hier erfahren Sie, wie Sie es installieren und verwenden.

Da die Entwicklungsmaschine das Ubuntu-Betriebssystem verwendet, können Sie Folgendes verwendenlsb_release -a Befehl zum Anzeigen von Ubuntu-Systeminformationen:

Fügen Sie hier eine Bildbeschreibung ein

und dann verwendenapt install tmuxBefehl zum Installieren von tmux. Sie können ihn verwenden, nachdem die Installation abgeschlossen ist.tmuxSie können tmux mit dem Befehl verwenden. Wenn Sie tmux beenden möchten, können Sie „Strg+d"Tastenkürzel.

Auf dem Entwicklungscomputer werden nur Dateien unter dem Pfad /root dauerhaft gespeichert. Software, die unter anderen Pfaden installiert ist, wird nach dem Neustart zurückgesetzt.

Spezifische Nutzungsmethoden können eingesehen werden unter:

https://www.ruanyifeng.com/blog/2019/10/tmux.html

4. Einführung in Conda und Shell (zusätzlich)

Conda ist ein Open-Source-Paketverwaltungs- und Umgebungsverwaltungssystem, das unter Windows, macOS und Linux läuft. Es installiert, führt und aktualisiert Softwarepakete und ihre Abhängigkeiten schnell. Mit Conda können Sie ganz einfach verschiedene Umgebungen auf Ihrem lokalen Computer erstellen, speichern, laden und wechseln.

Bereits auf dem Entwicklungscomputer installiertconda, wir können es direkt verwenden, und es gibt auch ein integriertes in der EntwicklungsmaschinecondaBefehlstudio-conda, werden wir im Folgenden vorstellencondaGrundlegende Verwendung von undstudio-condaWie man es benutzt und einführtstudio-condaWie wird es erreicht?

Wir werden es in den folgenden Teilen vorstellen:

  1. Conda-Einstellungen
  2. Conda-Umgebungsmanagement
  3. Conda und Pip
  4. Studio-conda wird mit Shell (Erweiterung) verwendet

4.1 Conda-Einstellungen

wir können benutzenconda --versionum die aktuelle Entwicklungsmaschine anzuzeigencondaVersionsinformation:

Fügen Sie hier eine Bildbeschreibung ein

wann wir es nutzen wollencondaDie Installation des Pakets wird sehr langsam sein. Wir können die Inlandsspiegelung einstellen, um die Installationsgeschwindigkeit zu verbessern. Das Beispiel ist wie folgt:

#设置清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Aber normalerweise verwenden wirpipNachdem wir das Paket installiert haben, werden wir es später vorstellenpipUndcondaUnterschied.

Wenn wir die Konfigurationsinformationen von Conda anzeigen möchten, können wir diese verwendenconda config --showBefehl, wenn es sich um die Standardeinstellung des Entwicklungscomputers handelt, wird Folgendes zurückgegeben: (Teil der Informationen)

Fügen Sie hier eine Bildbeschreibung ein

Diese Konfigurationen sind inCondaDie Umgebungskonfiguration wirkt sich auf die Methoden und Ergebnisse der Softwarepaketinstallation, Aktualisierungen, Umgebungsverwaltung und anderer Vorgänge aus.

4.2 Conda-Umgebungsmanagement

Dieser Teil istconda中非常重要的一部分,掌握了这一部分大家就可以将开发环境玩转到飞起了😀。

4.2.1 Erstellen Sie eine virtuelle Umgebung

wir können benutzenconda create -n name python``=3.10 Erstellen Sie eine virtuelle Umgebung. Dies bedeutet, dass eine virtuelle Umgebung mit Python-Version 3.10 und einem Namen erstellt wird.Nach der Erstellung können Sie.condaunter dem VerzeichnisenvsIm Verzeichnis gefunden.

Fügen Sie hier eine Bildbeschreibung ein

Wenn die Python-Version nicht angegeben ist, wird automatisch eine virtuelle Umgebung basierend auf der neuesten Python-Version erstellt. Gleichzeitig können wir beim Erstellen der virtuellen Umgebung die erforderlichen Pakete installieren:conda create -n name numpy matplotlib python=3.10(Aber ich empfehle Ihnen nicht, es auf diese Weise zu verwenden)

Allgemeine Parameter zum Erstellen einer virtuellen Umgebung sind wie folgt:

  • -n oder --name: Geben Sie den Namen der zu erstellenden Umgebung an.
  • -c oder --channel: Geben Sie zusätzliche Paketkanäle an.
  • –klonen: Klonen Sie eine vorhandene Umgebung, um eine neue Umgebung zu erstellen.
  • -p oder --prefix: Geben Sie den Installationspfad der Umgebung an (nicht standardmäßiger Speicherort).
4.2.2 Überprüfen Sie, welche virtuellen Umgebungen vorhanden sind

Wenn wir sehen möchten, welche virtuellen Umgebungen wir haben, können wir den folgenden Befehl verwenden:

conda env list
conda info -e
conda info --envs
  • 1
  • 2
  • 3

Fügen Sie hier eine Bildbeschreibung ein

Gleichzeitig können wir auch das Verzeichnis sehen, in dem sich die Umgebung befindet.

4.2.3 Aktivieren und Verlassen der virtuellen Umgebung

Nachdem wir die virtuelle Umgebung erstellt haben, können wir sie verwendenconda activate name Befehl zum Aktivieren der virtuellen Umgebung. Wie kann überprüft werden, ob der Wechsel erfolgreich ist?Es ist ganz einfach, schauen Sie einfach hin(base)Ob es der Name der erstellten virtuellen Umgebung wird.

Fügen Sie hier eine Bildbeschreibung ein

Wenn Sie die virtuelle Umgebung verlassen möchten, können Sie Folgendes verwenden:

conda activate
conda deactivate
  • 1
  • 2

Beide Befehle werden zurückgegebenbaseUmwelt, weilbaseEs ist die grundlegende Umgebung von Conda. Wenn Sie genau hinschauen,baseDas Umgebungsverzeichnis liegt auf einer höheren Ebene als andere Verzeichnisse der virtuellen Umgebung.

4.2.4 Virtuelle Umgebung löschen und exportieren

Wenn Sie eine virtuelle Umgebung löschen möchten, können Sie diese verwendenconda remove --name name --allWenn Sie nur ein oder mehrere Pakete in der virtuellen Umgebung löschen, können Sie diese verwendenconda remove --name name package_name

Das Exportieren einer virtuellen Umgebung ist für eine bestimmte Umgebung sehr wichtig, da die Abhängigkeiten einiger Softwarepakete sehr komplex sind und es schwierig ist, sie selbst neu zu erstellen und zu konfigurieren. Wenn wir die konfigurierte Umgebung exportieren, können wir sie beim nächsten Mal wiederherstellen. und Sie können die Konfiguration auch mit anderen teilen.

#获得环境中的所有配置
conda env export --name myenv > myenv.yml
#重新还原环境
conda env create -f  myenv.yml
  • 1
  • 2
  • 3
  • 4

Das werden wir zum Beispielxtuner0.1.17Die virtuelle Umgebung wird exportiert und die Konfigurationsinformationen lauten wie folgt:

Fügen Sie hier eine Bildbeschreibung ein

Diese beinhaltenUmgebungsnameDer Speicherort des Online-Repositorys für Pakete virtueller UmgebungenUndAbhängigkeiten der virtuellen Umgebung . Später werden wir erweiterte Verwendungsmethoden verwenden, um die virtuelle Umgebung schnell wiederherzustellen.

4,3 Conda und Pip

In diesem Teil stellen wir einige vorcondaUndpipEinige Unterschiede:

  1. Conda kann Nicht-Python-Pakete verwalten, und Pip kann nur Python-Pakete verwalten.
  2. conda kann zum Erstellen einer virtuellen Umgebung verwendet werden, pip kann und muss sich jedoch nicht auf Pakete wie virtualenv verlassen.
  3. Das von Conda installierte Paket wird kompiliertBinärdateiAbhängige Pakete werden während der Installation von Paketdateien automatisch installiertRad oder Quellcode, andere Abhängigkeiten als die Python-Sprache werden während des Installationsprozesses nicht unterstützt.
  4. Von Conda installierte Pakete werden in das Verzeichnis heruntergeladen, das der aktuellen virtuellen Umgebung entspricht, und können einmal heruntergeladen und mehrmals installiert werden. pip wird direkt in die entsprechende Umgebung heruntergeladen.

Rad Es handelt sich um ein Format des Python-Installationspakets.

Es handelt sich um ein vorkompiliertes Binärverteilungsformat, ähnlich den kompilierten Binärdateien in Conda.

Zu den Hauptvorteilen des Wheel-Formats gehören:

  1. Schnelle Installation: Da es vorkompiliert wurde, ist es nicht erforderlich, während der Installation den Kompilierungsprozess wie die Installation des Quellcodes durchzuführen, was Zeit spart.
  2. Konsistenz: Stellt sicher, dass die Installationsergebnisse über verschiedene Systeme und Umgebungen hinweg konsistent sind.

Wenn Sie beispielsweise eine große Python-Bibliothek installieren möchten, können Sie durch die Verwendung des Wheel-Formats Installationsprobleme vermeiden, die durch Unterschiede in den Kompilierungsumgebungen auf verschiedenen Computern verursacht werden. Darüber hinaus kann das Wheel-Format bei Systemen ohne Kompilierungsumgebung oder schwachen Kompilierungsfunktionen den Installationsprozess reibungsloser gestalten.

4.4 Studio-Conda-Nutzung und Shell (Erweiterung)

Dieser Teil ist ein erweiterter Teil, da ich denke, dass dieser Teil sehr interessant und sehr praktisch ist. Wenn Sie interessiert sind, können Sie ihn lernen.

Lassen Sie uns zunächst vorstellenstudio-conda , ein integrierter Befehl der Entwicklungsmaschine, der über ein Shell-Skript implementiert wird. Was ist ein Shell-Skript?

Shell-Skript Eine Textdatei, die eine Reihe von Befehlen enthält, die in einer bestimmten Reihenfolge angeordnet sind, um Aufgaben in einer Unix/Linux- oder ähnlichen Betriebssystemumgebung zu automatisieren.

Shell-Skripte werden normalerweise in der Shell-Sprache geschrieben. Bash, Sh usw. sind die grundlegenden Linux-Befehle, die wir zuvor eingeführt haben und die zur Shell-Sprache gehören.

Es verfügt über die folgenden wichtigen Funktionen:

  1. Automatisierung : Eine Reihe sich wiederholender, komplexer Vorgänge kann als Skript geschrieben und dann einfach ausgeführt werden, um diese Vorgänge zu automatisieren, wodurch Zeit gespart und Fehler reduziert werden. Zum Beispiel ein Skript, das regelmäßig jeden Tag wichtige Dateien sichert.
  2. Systemmanagement : Wird zur Verwaltung der Systemkonfiguration, Benutzerberechtigungen, Prozesssteuerung usw. verwendet. Beispielsweise ein Skript, das einen neuen Benutzer erstellt und dessen Berechtigungen festlegt.
  3. Stapelverarbeitung : Möglichkeit, mehrere Dateien oder Daten gleichzeitig zu verarbeiten. Beispielsweise ein Skript, das eine Reihe von Bilddateien von einem Format in ein anderes konvertiert.
  4. Prozesssteuerung: Wie bedingte Beurteilung (if-else), Schleife (for, while) usw., sodass Skripte je nach Situation unterschiedliche Vorgänge ausführen können.

Dasstudio-condaEs ist Teil der Automatisierung. Die Konfigurationsdatei der Bash-Umgebung des Root-Benutzers in unserer Entwicklungsmaschine.bashrc, aber tatsächlich ist die Hauptkonfigurationsdatei/share/.aide/config/bashrcIn dieser Datei sind einige Befehle geschrieben, mit denen wir einige Vorgänge schneller ausführen können, z. B.:

export no_proxy='localhost,127.0.0.1,0.0.0.0,172.18.47.140'
export PATH=/root/.local/bin:$PATH
export HF_ENDPOINT='https://hf-mirror.com'
alias studio-conda="/share/install_conda_env.sh"
alias studio-smi="/share/studio-smi"
  • 1
  • 2
  • 3
  • 4
  • 5

exportwird zum Festlegen von Umgebungsvariablen verwendet.aliasist das Kopieren einer SH-Datei in eine Variable. Dies kann im Terminal als Befehl ausgeführt werdenstudio-condaDas ist es.

Hierstudio-smiEs wird verwendet, um die Nutzung des virtuellen Speichers beim Öffnen zu überprüfen/share/studio-smiDie Datei ist zu sehen:

#!/bin/bash

if command -v vgpu-smi &> /dev/null
then
    echo "Running studio-smi by vgpu-smi"
    vgpu-smi
else
    echo "Running studio-smi by nvidia-smi"
    nvidia-smi
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Mit diesem Skript wird überprüft, ob ein vorhanden ist vgpu-smi Befehl, falls vorhanden, wird er ausgeführtvgpu-smi um Statusinformationen für eine virtuelle GPU (vGPU) anzuzeigen; wenn diese nicht vorhanden sind, wird sie ausgeführtnvidia-smi um NVIDIA-GPU-Statusinformationen anzuzeigen. Wie nachfolgend dargestellt:

Fügen Sie hier eine Bildbeschreibung ein

nvidia-smi ist ein Tool zur Überwachung und Verwaltung physischer NVIDIA-GPU-Geräte undvgpu-smi Entwickelt für die Überwachung und Verwaltung von GPU-Ressourcen, die durch NVIDIA vGPU-Technologie virtualisiert werden.

wir sehen/share/install_conda_env.shDer Inhalt der Datei ist wie folgt:

#!/bin/bash
# clone internlm-base conda env to user's conda env
# created by xj on 01.07.2024
# modifed by xj on 01.19.2024 to fix bug of conda env clone
# modified by ljy on 01.26.2024 to extend

XTUNER_UPDATE_DATE=`cat /share/repos/UPDATE | grep xtuner |awk -F= '{print $2}'`
HOME_DIR=/root
CONDA_HOME=$HOME_DIR/.conda
SHARE_CONDA_HOME=/share/conda_envs
SHARE_HOME=/share

list() {
    cat <<-EOF
  预设环境          描述

  internlm-base    pytorch:2.0.1, pytorch-cuda:11.7
  xtuner           Xtuner(源码安装: main $(echo -e "033[4mhttps://github.com/InternLM/xtuner/tree/main033[0m"), 更新日期:$XTUNER_UPDATE_DATE)
  pytorch-2.1.2    pytorch:2.1.2, pytorch-cuda:11.8
EOF
}

help() {
    cat <<-EOF
  说明: 用于快速clone预设的conda环境

  使用: 
  
    1. studio-conda env -l/list 打印预设的conda环境列表
  
    2. studio-conda <target-conda-name> 快速clone: 默认拷贝internlm-base conda环境
    
    3. studio-conda -t <target-conda-name> -o <origin-conda-name> 将预设的conda环境拷贝到指定的conda环境
        
EOF
}

clone() {
    source=$1
    target=$2

    if [[ -z "$source" || -z "$target" ]]; then
        echo -e "033[31m 输入不符合规范 033[0m"
        help
        exit 1
    fi

    if [ ! -d "${SHARE_CONDA_HOME}/$source" ]; then
        echo -e "033[34m 指定的预设环境: $source不存在033[0m"
        list
        exit 1
    fi

    if [ -d "${CONDA_HOME}/envs/$target" ]; then
        echo -e "033[34m 指定conda环境的目录: ${CONDA_HOME}/envs/$target已存在, 将清空原目录安装 033[0m"
        wait_echo&
        wait_pid=$!
        rm -rf "${CONDA_HOME}/envs/$target"
        kill $wait_pid
    fi

    echo -e "033[34m [1/2] 开始安装conda环境: <$target>. 033[0m"
    sleep 3
    tar --skip-old-files -xzvf /share/pkgs.tar.gz -C ${CONDA_HOME}
    wait_echo&
    wait_pid=$!
    conda create -n $target --clone ${SHARE_CONDA_HOME}/${source}
    if [ $? -ne 0 ]; then
        echo -e "033[31m 初始化conda环境: ${target}失败 033[0m"
        exit 10
    fi

    kill $wait_pid

    # for xtuner, re-install dependencies
    case "$source" in
    xtuner)
        source_install_xtuner $target
        ;;
    esac

    echo -e "033[34m [2/2] 同步当前conda环境至jupyterlab kernel 033[0m"
    lab add $target
    source $CONDA_HOME/bin/activate $target
    cd $HOME_DIR

    echo -e "033[32m conda环境: $target安装成功! 033[0m"

    echo """
    ============================================
                    ALL DONE!
    ============================================
    """
}

······
dispatch $@
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97

einer von ihnen*list*()Warte, das ist allesstudio-condaFunktion, die beispielsweise bestimmte Operationen implementieren kann, die wir verwenden könnenstudio-conda env listSo zeigen Sie die Standardumgebung an:

Fügen Sie hier eine Bildbeschreibung ein

In*clone*()Die Hauptfunktion der Funktion besteht darin, die Umgebung zu kopieren, sie kann jedoch nur aus der Standardumgebung kopiert werden. Der Hauptcode lautet tatsächlich:

tar --skip-old-files -xzvf /share/pkgs.tar.gz -C ${CONDA_HOME}

conda create -n $target --clone ${SHARE_CONDA_HOME}/${source}
  • 1
  • 2
  • 3

Entpacken Sie das komprimierte Paket der voreingestellten Umgebung und erstellen Sie dann eine virtuelle Umgebung durch Klonen. Allerdings ist auch eine gewisse Logik im Shell-Skript festgelegt, aber es ist nur ein gewisses Urteilsvermögen, wenn Sie mit einer Programmiersprache vertraut sind Wenn Sie es nicht verstehen, ist es auch kein großes Problem.

Wie fügen wir also unsere selbst erstellte Umgebung hinzu?studio-condaWas ist mit der Mitte?

Der erste Schritt besteht darin, eine neue Conda-Umgebung unter /share/conda_envs zu erstellen

conda erstellen -p /share/conda_envs/xxx python=3.1x

Der zweite Schritt besteht darin, die Dateien unter /root/.conda/pkgs auf dem lokalen Computer nach /share/pkgs zu kopieren, sie erneut zu komprimieren und zu ersetzen (dieser Schritt dient dazu, die großen öffentlichen Pakete während des Conda-Erstellungsprozesses zu speichern, um wiederholte Downloads zu vermeiden).

cp -r -n /root/.conda/pkgs/* /share/pkgs/

cd /share und tar -zcvf Pakete.tar.gz Pakete

Der dritte Schritt besteht darin, die Listenfunktion in install_conda_env.sh zu aktualisieren und eine neue Conda-Umgebungsbeschreibung hinzuzufügen.

Das Obige ist die von der Entwicklungsmaschine standardmäßig bereitgestellte Methode. Tatsächlich gibt es eine andere Methode, die wir zuvor verwendet habencondaExportiertxtuner0.1.17Konfigurationsdateien für virtuelle Umgebungen können wir nutzenconda env create -f xtuner0.1.17.yml Befehl zum Wiederherstellen der virtuellen Umgebung.Schreiben wir ein einfaches Shell-Skript, um diesen Vorgang zu implementieren: Wir erstellentest.shDatei, schreiben Sie den folgenden Inhalt:

#!/bin/bash

# 定义导出环境的函数
export_env() {
    local env_name=$1
    echo "正在导出环境: $env_name"
    # 导出环境到当前目录下的env_name.yml文件
    conda env export -n "$env_name" > "$env_name.yml"
    echo "环境导出完成。"
}

# 定义还原环境的函数
restore_env() {
    local env_name=$1
    echo "正在还原环境: $env_name"
    # 从当前目录下的env_name.yml文件还原环境
    conda env create -n "$env_name" -f "$env_name.yml"
    echo "环境还原完成。"
}

# 检查是否有足够的参数
if [ $# -ne 2 ]; then
    echo "使用方法: $0 <操作> <环境名>"
    echo "操作可以是 'export' 或 'restore'"
    exit 1
fi

# 根据参数执行操作
case "$1" in
    export)
        export_env "$2"
        ;;
    restore)
        restore_env "$2"
        ;;
    *)
        echo "未知操作: $1"
        exit 1
        ;;
esac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

Nachdem wir die Erstellung des Shell-Skripts abgeschlossen haben, müssen wir dem Skript Berechtigungen erteilen. Sie können den folgenden Befehl verwenden:chmod +x test.sh , dann eingeben./test.sh restore xtuner0.1.17Und drücken Sie die Eingabetaste, um die virtuelle Umgebung wiederherzustellen.

Fügen Sie hier eine Bildbeschreibung ein

Dies unterscheidet sich jedoch nicht wesentlich von der direkten Verwendung. Vergleicht man diesen Vorgang mit dem Vorgang in der Entwicklungsmaschine,studio-conda Das Kombinieren der Befehle ist sehr praktisch, die Methoden zum Kopieren der Umgebung sind jedoch unterschiedlich.Wenn Sie es implementieren möchten, müssen Sie es daher tun/share/install_conda_env.shDie Logik der Datei wird geändert.

Okay, das ist der gesamte Inhalt dieses Levels. Ich hoffe, dass der obige Inhalt in Zukunft für alle hilfreich sein wird. Wenn Sie mehr über Linux erfahren möchten, können Sie meinen Blog-Artikel lesen Es wird für uns hilfreich sein, große Modelle zu lernen, aber wenn Sie Linux gut lernen, wird es das Erlernen großer Modelle sehr reibungslos machen. Vergessen Sie nicht, die zuvor festgelegten Level abzuschließen!

Blog-Link:linux

häufiges Problem

1. Die Entwicklungsmaschinenumgebung von InternStudio ist defekt. Wie initialisiere ich die Entwicklungsmaschinenumgebung?

Sorgfältig ausführen! ! ! !Alle Daten gehen verloren. Dies ist nur auf der InternStudio-Plattform verfügbar. Tun Sie dies nicht auf Ihrem eigenen Computer.

  • Der erste Schritt besteht darin, das lokale Terminal über SSH mit der Entwicklungsmaschine zu verbinden (zum Betrieb muss eine Verbindung über SSH hergestellt werden, nicht über das Web!!!)
  • Ausführung im zweiten Schritt rm -rf /rootDie Wartezeit beträgt ca. 10 Minuten
  • Der dritte Schritt besteht darin, die Entwicklungsmaschine neu zu starten. Das System setzt die Konfigurationsdatei im Pfad /root zurück.
  • der vierte Schritt ln -s /share /root/share

Level-Mission

Um die Level-Mission zu bestehen, müssen Sie Screenshots in den wichtigsten Schritten machen:

MissionsdetailsZeitaufwand für die Fertigstellung
MissionSchließen Sie die SSH-Verbindung und Portzuordnung ab und führen Sie sie aushello_world.py10 Minuten
Optionale Aufgabe 1Führen Sie die grundlegenden Linux-Befehle auf dem Entwicklungscomputer aus10 Minuten
Optionale Aufgabe 2Verwenden Sie VSCODE, um eine Remoteverbindung zum Entwicklungscomputer herzustellen und eine Conda-Umgebung zu erstellen10 Minuten
Optionale Aufgabe 3Erstellen und ausführentest.shdokumentieren10 Minuten