2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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.
😀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!
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:
Lassen Sie mich Ihnen die Funktionen der Seiten erklären, die jeder Seriennummer entsprechen:
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”
Hier entscheiden wir uns für das ErstellenMaschine zur persönlichen Entwicklung, genanntprüfen,CudaDie 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.
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
In:
Wir haben es oben vorgestelltInternStudio-Plattformund wie man eine Entwicklungsmaschine erstellt. In diesem Abschnitt wollen wir verstehen, wasSSH、Warum eine Remote-Verbindung verwenden?, So verwenden Sie SSHFernverbindungEntwicklungsmaschine, was istPort-Mappingund wie es weitergehtPort-Mapping。
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.
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。
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:
Nachdem wir eine Verbindung zur Entwicklungsmaschine hergestellt haben, können wir sie verwendenhostname
Um den Namen der Entwicklungsmaschine anzuzeigen, verwenden Sieuname -a
Um die Kernelinformationen der Entwicklungsmaschine anzuzeigen, verwenden Sielsb_release -a
Um 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.exit
Das ist es.
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:
Hier verwenden wir den RSA-Algorithmus, um den Schlüssel zu generieren. Der Befehl lautet:
ssh-keygen -t rsa
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-Content
Befehl zum Anzeigen des generierten Schlüssels, der verwendet werden kann, wenn es sich um ein Linux-Betriebssystem handeltcat
Befehl.
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,
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.
Starten Sie nach Abschluss der SSH-Schlüsselerstellung neuTerminalBei einer Remote-Verbindung wird der Schritt der Passworteingabe übersprungen.
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.)
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.
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.
Wir kopieren den Anmeldebefehl, fügen den Befehl dann in das Popup-Fenster ein und drücken schließlich die Eingabetaste:
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
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
no
UndUserKnownHostsFile
*/dev/null
Löschen Sie das Popup-Fenster, das zur Überprüfung des Fingerabdrucks angezeigt wird:
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/null
Es 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.
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 anzuzeigenroot
Dies bedeutet, dass wir beim ersten Herstellen einer Verbindung mit der Entwicklungsmaschine Folgendes verwenden/root
Arbeitsliste.
Und im Bild unten->
Zeigt an, dass Sie das Arbeitsverzeichnis nach dem Aufrufen des Entwicklungscomputers erneut auswählen müssen:
Und im Bild unten->
Zeigt den Zugriff auf das Arbeitsverzeichnis an, das von der letzten Entwicklungsmaschine ausgewählt wurde:
Das jeweils ausgewählte Arbeitsverzeichnis wird unter den Informationen zur Entwicklungsmaschine angezeigt: (Hier gibt es ein zusätzliches Arbeitsverzeichnis für lagent)
Als nächstes werden wir vorstellen, wannPort-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.
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
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:
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. .
Wir gehen immer noch zur Schnittstelle der Entwicklungsmaschine, suchen unsere Entwicklungsmaschine und klickenKundendienste, kopiere den ersten Befehl,
ssh -p 37367 [email protected] -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no
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()
Denken Sie nach der Bearbeitung daranctrl+s
speichern
Bevor Sie den Code ausführen, müssen Sie ihn verwendenpip install gradio==4.29.0
Befehl 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.py
Befehl
Wenn keine Portzuordnung durchgeführt wird, kann nicht über die lokale IP darauf zugegriffen werden.
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
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.)
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:
Hier können Sie die Portzuordnungsinformationen anzeigen. Wenn Sie den Port ändern müssen, können Sie die Portnummer in der Portspalte ändern.
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.)
Unter Linux gehören zu den gängigen Dateiverwaltungsvorgängen:
touch
Der Befehl erstellt eine leere Datei.mkdir
Befehl.cd
Befehl.pwd
Befehl.cat
Den gesamten Inhalt der Datei direkt anzeigen,more
Undless
Kann in Seiten angezeigt werden.vi
odervim
Warten Sie auf den Herausgeber.cp
Befehl.ln
Befehl.mv
Befehl.rm
Befehl.rmdir
(Es können nur leere Verzeichnisse gelöscht werden) oder rm -r
(Nicht leere Verzeichnisse können gelöscht werden).find
Befehl.ls
Befehl, z. B. using ls -l
Detaillierte Informationen zu Dateien in einem Verzeichnis anzeigen.sed
Befehl.Hier sind einige Befehle, die wir im Kurs verwenden werden:
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.py
dokumentieren:
Auf die gleiche Weise, wenn Sie eine Datei mit dem Namen erstellen möchtentest
Verzeichnis:
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:
Was wir jetzt verwenden, istroot
Verzeichnis, 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ötigtroot
Verzeichnis, darunter.
Stellt das aktuelle Verzeichnis dar,..
Das dargestellte übergeordnete Verzeichnis.Wenn ich jetzt eintreten würdetest
Verzeichnis und kehren Sie dann zu zurückroot
Verzeichnis, wir können dies tun:
wir können benutzenpwd
Befehl zum Anzeigen des aktuellen Verzeichnisses: Dadurch können wir leichter feststellen, in welchem Verzeichnis wir uns gerade befinden.
cat
Der Befehl kann den Inhalt der Datei anzeigen und es können weitere Befehle verwendet werden--help
Befehl zum Anzeigen:
Wir können es verwenden, wenn wir Dateien bearbeiten müssenvi
odervim
Wenn Sie mit dem Befehl Dateibearbeitung beginnen, gibt es drei Modi:
Rufen Sie den Bearbeitungsmodus auf, um ihn zu verwendeni
Der Vorteil von vim besteht darin, dass Sie im Terminal einfache Dateiänderungen vornehmen können.
**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.
cp 源文件 目标文件
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 [参数][源文件或目录][目标文件或目录]
Die Parameter sind wie folgt:
mv
Befehl undrm
Die Befehle werden auf ähnliche Weise verwendet, jedochmv
Es dient zum Verschieben von Dateien oder Verzeichnissen und kann auch umbenannt werden.rm
Der Befehl dient zum Löschen von Dateien oder Verzeichnissen.
Häufig verwendete Methoden sind wie folgt:
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
。
find
Der 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 istfind
Einige häufige Verwendungen des Befehls:
-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.txt
dokumentieren.-type
Option zum Suchen von Dateien nach Dateityp. Zum Beispiel,find /path/to/directory -type f
Alle gewöhnlichen Dateien im angegebenen Verzeichnis und seinen Unterverzeichnissen werden gefunden.-size
Option zum Suchen von Dateien nach Dateigröße. Zum Beispiel,find /path/to/directory -size +100M
Findet Dateien, die größer als 100 MB sind, im angegebenen Verzeichnis und seinen Unterverzeichnissen.-mtime
、-atime
oder-ctime
Optionen finden Dateien anhand ihrer Änderungszeit, Zugriffszeit oder Statusänderungszeit. Zum Beispiel,find /path/to/directory -mtime -7
Findet Dateien im angegebenen Verzeichnis und seinen Unterverzeichnissen, die innerhalb von 7 Tagen geändert wurden.-perm
Option zum Suchen von Dateien basierend auf Dateiberechtigungen. Zum Beispiel,find /path/to/directory -perm 755
Findet Dateien mit der Berechtigung 755 im angegebenen Verzeichnis und seinen Unterverzeichnissen.-user
oder-group
Optionen finden Dateien nach ihrem Besitzer oder ihrer Gruppe. Zum Beispiel,find /path/to/directory -user username
Durchsucht das angegebene Verzeichnis und seine Unterverzeichnisse, die dem Benutzer gehörenusername
dokumentieren.-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.txt
Datei am Ende.ls
Der 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-l
Wird in Kombination verwendet, um die Dateigröße in einer für Menschen lesbaren Weise anzuzeigen (z. B.K
、M
、G
Warten).-R
: Den Inhalt von Unterverzeichnissen rekursiv auflisten.-t
: Anzeige in der Reihenfolge der Dateiänderungszeit. ,sed
Command ist ein Stream-Editor, der hauptsächlich für die Textverarbeitung verwendet wird. Er wird häufig bei der Verarbeitung komplexer Dateioperationen verwendet.sed
Häufig verwendete Parameter und Anwendungsbeispiele für Befehle sind wie folgt:
-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.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“.im Beispiel verwendetecho
Befehl, dies ist das gleiche wie in Pythonprint
Das 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 verwendengrep
Befehl zum Anzeigen der installierten Includes in Pythonos
Feldpaket:
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.ProzessmanagementBefehle sind wichtige Werkzeuge zur Systemüberwachung und Prozessverwaltung. Zu den häufig verwendeten Prozessverwaltungsbefehlen gehören:
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 # 显示系统所有进程的详细信息
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命令,动态显示进程信息
pstree
: Zeigt die aktuell ausgeführten Prozesse und ihre Eltern-Kind-Beziehungen in Form eines Baumdiagramms an. pstree # 显示进程树
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 # 查找特定用户的所有进程
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 # 以较低优先级运行一个长时间运行的命令
jobs
: Zeigt eine Liste der Jobs in der aktuellen Terminalsitzung an, einschließlich der im Hintergrund laufenden Prozesse. jobs # 列出当前会话的后台作业
bg
Undfg
:bg
Lassen Sie den angehaltenen Prozess im Hintergrund laufen.fg
Bringen Sie den Hintergrundprozess wieder in den Vordergrund.bg # 将最近一个挂起的作业放到后台运行
fg # 将后台作业调到前台运行
kill
: Senden Sie ein Signal an den angegebenen Prozess, der normalerweise zum Beenden des Prozesses verwendet wird. kill PID # 杀死指定的进程ID
Beachten,kill
Der Befehl wird standardmäßig gesendetSIGTERM
Signal, das verwendet werden kann, wenn der Prozess nicht reagiert-9
verwendenSIGKILL
Signal bricht den Prozess gewaltsam ab:
kill -9 PID # 强制杀死进程
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.UndSIGKILL
Die 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:
nvidia-smi
nvidia-smi -l 1
Dieser Befehl aktualisiert die Statusinformationen jede Sekunde.
nvidia-smi -h
nvidia-smi pmon
nvidia-smi --id=0 --ex_pid=12345
Dadurch wird der Prozess mit PID 12345 auf GPU-ID 0 zwangsweise beendet.
nvidia-smi -pm 1
nvidia-smi -i 0 -pm 1
Der erste Befehl versetzt alle GPUs in den Leistungsmodus, der zweite Befehl zielt nur auf die GPU mit der ID 0 ab.
nvidia-smi --id=0 -r
Dadurch wird die GPU mit der ID 0 neu gestartet.
nvidia-smi -h
Das Folgende ist eine Einführung in GPU-Informationen anhand eines Bildes:
Hier ist ein WerkzeugTMUX
,TMUX
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 wirdXtuner
Die Feinabstimmung des Modells dauert langeTmux
Es 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:
und dann verwendenapt install tmux
Befehl zum Installieren von tmux. Sie können ihn verwenden, nachdem die Installation abgeschlossen ist.tmux
Sie 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
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 Entwicklungsmaschineconda
Befehlstudio-conda
, werden wir im Folgenden vorstellenconda
Grundlegende Verwendung von undstudio-conda
Wie man es benutzt und einführtstudio-conda
Wie wird es erreicht?
Wir werden es in den folgenden Teilen vorstellen:
wir können benutzenconda --version
um die aktuelle Entwicklungsmaschine anzuzeigenconda
Versionsinformation:
wann wir es nutzen wollenconda
Die 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
Aber normalerweise verwenden wirpip
Nachdem wir das Paket installiert haben, werden wir es später vorstellenpip
Undconda
Unterschied.
Wenn wir die Konfigurationsinformationen von Conda anzeigen möchten, können wir diese verwendenconda config --show
Befehl, wenn es sich um die Standardeinstellung des Entwicklungscomputers handelt, wird Folgendes zurückgegeben: (Teil der Informationen)
Diese Konfigurationen sind inConda
Die Umgebungskonfiguration wirkt sich auf die Methoden und Ergebnisse der Softwarepaketinstallation, Aktualisierungen, Umgebungsverwaltung und anderer Vorgänge aus.
Dieser Teil istconda
中非常重要的一部分,掌握了这一部分大家就可以将开发环境玩转到飞起了😀。
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.conda
unter dem Verzeichnisenvs
Im Verzeichnis gefunden.
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:
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
Gleichzeitig können wir auch das Verzeichnis sehen, in dem sich die Umgebung befindet.
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.
Wenn Sie die virtuelle Umgebung verlassen möchten, können Sie Folgendes verwenden:
conda activate
conda deactivate
Beide Befehle werden zurückgegebenbase
Umwelt, weilbase
Es ist die grundlegende Umgebung von Conda. Wenn Sie genau hinschauen,base
Das Umgebungsverzeichnis liegt auf einer höheren Ebene als andere Verzeichnisse der virtuellen Umgebung.
Wenn Sie eine virtuelle Umgebung löschen möchten, können Sie diese verwendenconda remove --name name --all
Wenn 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
Das werden wir zum Beispielxtuner0.1.17
Die virtuelle Umgebung wird exportiert und die Konfigurationsinformationen lauten wie folgt:
Diese beinhaltenUmgebungsname、Der 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.
In diesem Teil stellen wir einige vorconda
Undpip
Einige Unterschiede:
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:
- 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.
- 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.
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:
Dasstudio-conda
Es 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/bashrc
In 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"
export
wird zum Festlegen von Umgebungsvariablen verwendet.alias
ist das Kopieren einer SH-Datei in eine Variable. Dies kann im Terminal als Befehl ausgeführt werdenstudio-conda
Das ist es.
Hierstudio-smi
Es wird verwendet, um die Nutzung des virtuellen Speichers beim Öffnen zu überprüfen/share/studio-smi
Die 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
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:
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.sh
Der 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 $@
einer von ihnen*list
*()
Warte, das ist allesstudio-conda
Funktion, die beispielsweise bestimmte Operationen implementieren kann, die wir verwenden könnenstudio-conda env list
So zeigen Sie die Standardumgebung an:
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}
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-conda
Was 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 habenconda
Exportiertxtuner0.1.17
Konfigurationsdateien 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.sh
Datei, 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
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.17
Und drücken Sie die Eingabetaste, um die virtuelle Umgebung wiederherzustellen.
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.sh
Die 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
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.
rm -rf /root
Die Wartezeit beträgt ca. 10 Minutenln -s /share /root/share
Um die Level-Mission zu bestehen, müssen Sie Screenshots in den wichtigsten Schritten machen:
Missionsdetails | Zeitaufwand für die Fertigstellung | |
---|---|---|
Mission | Schließen Sie die SSH-Verbindung und Portzuordnung ab und führen Sie sie aushello_world.py | 10 Minuten |
Optionale Aufgabe 1 | Führen Sie die grundlegenden Linux-Befehle auf dem Entwicklungscomputer aus | 10 Minuten |
Optionale Aufgabe 2 | Verwenden Sie VSCODE, um eine Remoteverbindung zum Entwicklungscomputer herzustellen und eine Conda-Umgebung zu erstellen | 10 Minuten |
Optionale Aufgabe 3 | Erstellen und ausführentest.sh dokumentieren | 10 Minuten |