Partage de technologie

Niveau 1 : Connaissance de base de Linux

2024-07-12

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

Répertoire des bases de Linux

Préface

Cet article est constitué des notes du troisième camp d'entraînement modèle à grande échelle pour les universitaires organisé par le Laboratoire d'intelligence artificielle de Shanghai. Il est destiné uniquement à titre de référence pour les individus et les assistants pédagogiques lors de la correction des devoirs.Lien original du tutoriel
Pour vous inscrire, veuillez rechercher « The Third Scholar Model Practice Camp » sur WeChat.
Cette note est une note annotée personnellement et modifiée sur la base du didacticiel original.

Niveau Linux+InternStudio

😀Hello大家好,欢迎来到Grand modèle éruditCamp pratique, voici un cours de base préparé par le camp pratique pour les étudiants qui participent au camp pratique pour la première fois et les étudiants de diverses industries qui n'ont aucune connaissance de base de Linux. Ici, nous allons vous apprendre à l'utiliser.Machine de développement InternStudio, et maîtriser quelques basesConnaissance Linux , pour que tout le monde ne sache pas par où commencer dans les cours suivants, j'espère que cela sera utile à tout le monde. Nous avons préparé quelques tâches de niveau pour vous dans les tâches de niveau ici. Lorsque vous aurez terminé les tâches de niveau requises et effectué votre enregistrement, vous recevrez la récompense de puissance de calcul du niveau actuel.commençons!

1. Introduction à la machine de développement InternStudio

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

Si vous souhaitez en savoir plus sur InternStudio, vous pouvez consulter les documents suivants : Stage en studio

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

Ouvrez d'abord le lien ci-dessus pour accéder à InternStudio. Après vous être connecté, vous accéderez automatiquement à l'interface de la console, comme indiqué dans la figure ci-dessous :

Insérer la description de l'image ici

Je vous explique les fonctions des pages correspondant à chaque numéro de série :

  1. Ici vous pouvez créerMachine de développement, ainsi que modifier la configuration de la machine de développement et afficher les journaux associés, etc.

Insérer la description de l'image ici

  1. OK iciVisualisation Affichez les fichiers et les dossiers sur la machine de développement. Si vous créez deux machines de développement, elles utilisent le même disque cloud. (Étant donné que chaque machine de développement est un conteneur Docker, un disque de stockage cloud est monté. Pour obtenir des explications sur les termes professionnels, veuillez consulter : Explication des termes professionnels) Ici, vous pouvez télécharger des fichiers ou des dossiers, créer des fichiers et afficher les fichiers cachés.

Insérer la description de l'image ici

  1. Il s'agit d'une nouvelle fonction de la machine de développement. Si vous souhaitez réaliser un projet, vous pouvez demander des ressources auprès de l'assistant. La fonction de l'équipe s'adresse à tous les membres.Ressources informatiques partagées,避免造成资源浪费。(毕竟烧的可都是💴啊)
  2. Ceci est utilisé pour configurerClé SSH, nous parlerons de la façon de l'utiliser plus tard.
  3. Le dernier endroit est pour modifier vos informations personnelles et vérifier votreRessources informatiquesusage spécifique.

Ce qui précède est une brève introduction à la plateforme InternStudio. Voyons comment créer une machine de développement. Nous allons à la page d'accueil et cliquons sur ".Créer une machine de développement

Insérer la description de l'image ici

Ici, nous choisissons de créermachine de développement personnel, nommétestCudaLa version est 12.2,Allocation des ressourcesSélectionnez 10 % et la durée par défaut est correcte.

Une fois la création terminée, dansMachine de développementVous pouvez voir la machine de développement que vous venez de créer sur l'interface. Cliquez pour accéder à la machine de développement.

Insérer la description de l'image ici

Après être entré dans la machine de développement, vous pouvez voir la page principale de la machine de développement. La machine de développement propose trois modes :JupyterLab, Terminal et VScode

Insérer la description de l'image ici

dans:

  1. JupyterLab: Un environnement de programmation et d'enseignement interactif avec un terminal intégré permettant de visualiser facilement des fichiers, d'exécuter du code, etc.
  2. Terminal(Terminal, le plus léger) : Principalement utilisé pour les opérations en ligne de commande, ou pour l'exécution de scripts et de programmes simples
  3. Code VS: Le VSCode intégré dans la page Web peut également être développé à distance via une connexion SSH dans le VSCode local. Ce qui suit explique comment configurer la connexion à distance.

Insérer la description de l'image ici

  1. Il s'agit d'une utilisation des ressources, qui sera utilisée dans les cours ultérieurs.

2. SSH et mappage de ports

Nous avons présenté ci-dessusPlateforme InternStudio, et comment créer une machine de développement. Dans cette section, nous voulons comprendre ce qu'est une machine de développement.SSHPourquoi utiliser la connexion à distance, Comment utiliser SSHconnexion à distanceMachine de développement, qu'est-ce que c'estCartographie des portset comment procéderCartographie des ports

2.1 Qu'est-ce que SSH ?

SSHLe nom complet est Secure Shell, qui se traduit en chinois par Secure Shell.protocole de sécurité réseau , réalisez un accès sécurisé, un transfert de fichiers et d'autres services grâce à des mécanismes de cryptage et d'authentification. Le protocole SSH fournit des services réseau sécurisés dans un environnement réseau non sécurisé en chiffrant et authentifiant les données réseau.

SSH est (architecture C/S) parserveuretclientAfin d'établir un canal SSH sécurisé, les deux parties doivent d'abord établir une connexion TCP, puis négocier le numéro de version et les différents algorithmes utilisés, et générer le même.clé de session utilisé pour le chiffrement symétrique ultérieur. Après avoir terminé l'authentification de l'utilisateur, les deux parties peuvent établir une session pour l'échange de données.

Ensuite, dans la pratique ultérieure, nousConfigurer les clés SSH, la clé de configuration est telle que nous n'avons pas besoin de saisir le mot de passe à plusieurs reprises lorsque nous nous connectons à distance à la machine de développement, puisPourquoi se connecter à distance ?

L'avantage de la connexion à distance est que si vous utilisez un bureau distant, vous pouvez vous connecter à distance à la machine de développement via SSH, afin de pouvoir développer localement. Et si vous avez besoin d'exécuter du code local et que vous ne disposez pas d'un environnement, une connexion à distance est indispensable.

2.2 Comment utiliser SSH pour se connecter à distance à la machine de développement ?

2.2.1 Utiliser un mot de passe pour la connexion à distance SSH

Tout d'abord, nous utilisons la méthode de saisie du mot de passe pour la connexion à distance SSH. Plus tard, nous expliquerons comment configurer une connexion sans mot de passe.

Après avoir terminé la création de la machine de développement, nous devons ouvrir le terminal powerShell de notre ordinateur et utiliserWin+R Utilisez la touche de raccourci pour ouvrir la boîte d'exécution, entrez PowerShell et ouvrez le terminal PowerShell. (Si vous utilisez le système d'exploitation Linux ou Mac, les étapes suivantes sont les mêmes)

Nous revenons à la plateforme de la machine de développement et entronsMachine de développementRecherchez la machine de développement que nous avons créée sur la page et cliquez surConnexion SSH

Insérer la description de l'image ici

Insérer la description de l'image ici

puis copieCommande de connexion, 37367, voici le port SSH utilisé par la machine de développement. Généralement, le port 22 est utilisé sans ce numéro de port, vous ne pouvez pas vous connecter à SSH, et le port de chacun est différent, donc si vous vous connectez à la machine de développement, vous ne pouvez pas vous connecter. , vous devez vérifier si le port est erroné.

Collez la commande copiée dans PowerShell et appuyez sur Entrée. Ici, nous devons saisir le mot de passe. Nous copions le mot de passe sous la commande de connexion et le collons dans le terminal.Notez qu'après avoir copié le mot de passe, cliquez avec le bouton droit pour le coller. La touche de raccourci du shell pour le coller sur certains ordinateurs est.shift+ins, le mot de passe collé ici ne sera pas affiché, c'est normal.

Enfin, appuyez sur Entrée et le contenu suivant apparaît, indiquant le succès :

Insérer la description de l'image ici

Insérer la description de l'image ici

Après nous être connectés à la machine de développement, nous pouvons utiliserhostnamePour afficher le nom de la machine de développement, utilisezuname -aPour afficher les informations sur le noyau de la machine de développement, utilisezlsb_release -aPour afficher les informations sur la version de la machine de développement, utiliseznvidia-smiVérifiez les informations du GPU. Nous parlerons de ces commandes plus tard. Si vous souhaitez quitter la connexion à distance, saisissez-la deux fois.exitC'est ça.

2.2.2 Configurer la clé SSH pour la connexion à distance SSH

Mais lorsque nous développons et étudions, il est difficile de saisir le mot de passe à chaque fois à distance. Nous pouvons configurer la clé SSH pour ignorer l'étape de saisie du mot de passe. Dans la commande ssh, nous pouvons utiliser.générateur de clés sshcommande pour générer la clé

La clé SSH est une méthode d'authentification de connexion sûre et pratique, utilisée pour l'authentification et la communication cryptée dans le protocole SSH.

générateur de clés sshPrend en charge les clés d'authentification RSA et DSA.

Les paramètres couramment utilisés incluent :

  • -t : spécifiez le type de clé, tel que dsa, ecdsa, ed25519, rsa.
  • -b : Spécifiez la longueur de la clé.
  • -C : Ajouter des commentaires.
  • -f : Spécifiez le nom du fichier pour enregistrer la clé.
  • -i : lit les fichiers de clé privée/publique non chiffrés compatibles ssh-v2.

Ici nous utilisons l'algorithme RSA pour générer la clé, la commande est :

ssh-keygen -t rsa
  • 1

Après avoir entré la commandeEntrez jusqu'au boutÇa y est, la clé ici est générée par défaut dans~/.ssh/sous le répertoire,~Cela signifie le répertoire personnel, si c'est Windows, c'estC:Users{your_username} .Peut être utilisé dans PowerShellGet-ContentCommande pour afficher la clé générée, qui peut être utilisée s'il s'agit d'un système d'exploitation LinuxcatCommande.

Insérer la description de l'image ici

Insérer la description de l'image ici

Ensuite, nous revenons à la plateforme de la machine de développement et cliquons sur Configuration sur la page d'accueilClé SSH, puis cliqueAjouter une clé publique SSH

Insérer la description de l'image ici

Insérer la description de l'image ici

Copiez la clé que vous venez de générer et collez-la dans la zone de clé publique. Enfin, cliquez sur Ajouter maintenant et la configuration de la clé SSH est terminée.

Insérer la description de l'image ici

Après avoir terminé la création de la clé SSH, redémarrezTerminalLors de la connexion à distance, l'étape de saisie du mot de passe sera ignorée.

2.2.3 Utiliser VScode pour la connexion à distance SSH

Bien entendu, vous pouvez également utiliser des logiciels de connexion à distance SSH, tels que :Windterm, Xterminal attendez. Ici, nous utilisons VScode pour la connexion à distance. L'avantage d'utiliser VScode est qu'il s'agit d'un éditeur de code, très pratique pour la modification de code et d'autres opérations.

Si nous voulons nous connecter à distance dans VScode, nous devons également installer un ensemble de plug-ins. Vous pouvez rechercher en ligne comment installer VScode. (Le vscode dans la machine de développement ne peut pas rechercher ce plug-in, mais le vscode local le peut)

Insérer la description de l'image ici

Si vous avez installé VScode, vous pouvez cliquer sur la page d'extension à gauche et saisir "SSH" dans le champ de recherche. Le premier est le plug-in que nous voulons installer.

Insérer la description de l'image ici

Après avoir installé le plug-in, cliquez sur l'icône de connexion à distance dans la barre latérale, cliquez sur le bouton "+" dans SSH et ajoutez la commande de connexion pour la connexion SSH de la machine de développement.

Insérer la description de l'image ici

Nous copions la commande de connexion, puis collons la commande dans la fenêtre contextuelle et enfin appuyons sur Entrée :

Insérer la description de l'image ici

Insérer la description de l'image ici

Le fichier de configuration par défaut convient bien sûr, vous pouvez également le personnaliser. Voici le contenu spécifique du fichier de configuration : (Cela inclut toutes vos informations de connexion à distance)

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

Si vous souhaitez ajouter manuellement certaines des options de configuration suivantes, vous devez modifier les parties correspondantes selon le format ci-dessus.

Si *StrictHostKeyChecking noetUserKnownHostsFile* /dev/nullSupprimez la fenêtre contextuelle qui s'affichera pour la vérification des empreintes digitales :

Insérer la description de l'image ici

StrictHostKeyChecking no Indique que la vérification stricte des clés d'hôte est désactivée. Cela signifie que lors de la connexion à un nouveau serveur SSH, la clé d'hôte du serveur ne sera pas strictement vérifiée, ce qui peut présenter un certain risque de sécurité.

UserKnownHostsFile /dev/nullIl définit le fichier de clé d'hôte connu de l'utilisateur sur /dev/null, ce qui ignore essentiellement l'enregistrement et l'utilisation des clés d'hôte connues.

Cependant, dans les pratiques générales de sécurité, il n'est pas recommandé de désactiver arbitrairement la vérification stricte des clés d'hôte.

Cliquez ensuite sur « Connecter » dans la fenêtre d'invite qui apparaît dans le coin inférieur droit pour vous connecter à distance à la machine de développement.

Insérer la description de l'image ici

Insérer la description de l'image ici

Une fois la connexion à distance terminée, vous pouvez choisir le dossier à ouvrir, qui peut également être appelé répertoire de travail. Vous pouvez choisir le dossier dans la machine de développement ou le dossier local. Le dossier dans la machine de développement est ce que nous avons mentionné précédemment.disque cloud

Lorsque vous établirez une connexion à distance la prochaine fois, vous n'aurez pas besoin de saisir de commandes de connexion ni d'autres informations. Il vous suffit d'ouvrir la connexion à distance de vscode pour voir les informations sur la machine de développement de la première connexion, comme suit.rootCela signifie que lorsque nous nous connectons pour la première fois à la machine de développement, nous utilisons/rootListe de travail.

Insérer la description de l'image ici

Et sur la photo ci-dessous->Indique que vous devez resélectionner le répertoire de travail après avoir accédé à la machine de développement :

Insérer la description de l'image ici

Et sur la photo ci-dessous->Indique l'entrée dans le répertoire de travail sélectionné par la dernière machine de développement :

Insérer la description de l'image ici

Le répertoire de travail sélectionné à chaque fois sera affiché sous les informations de la machine de développement : (il y a un répertoire de travail supplémentaire pour l'agent ici)

Insérer la description de l'image ici

Ensuite, nous présenterons quandCartographie des ports

2.3. Cartographie des ports

2.3.1 Qu'est-ce que le mappage de ports ?

Cartographie des ports Il s'agit d'une technologie réseau qui peut mapper n'importe quel port du réseau externe au port correspondant du réseau interne pour réaliser la communication entre le réseau interne et le réseau externe. Grâce au mappage des ports, les services ou les applications de l'intranet sont accessibles depuis le réseau externe pour permettre une communication pratique sur le réseau.

Alors pourquoi devons-nous effectuer un mappage de ports lorsque nous utilisons une machine de développement ?

Parce que dans les cours suivants, nous réaliserons des modèlesdémo_web Dans la pratique du déploiement, au cours de ce processus, vous rencontrerez probablement le problème d'un chargement incomplet de l'interface utilisateur Web.En effet, lors de l'exécution de web_demo dans l'IDE Web de la machine de développement, l'accès direct au service http/https dans la machine de développement peut rencontrer des problèmes de proxy.ressources de l'interface utilisateurPas complètement chargé.

Donc, pour résoudre ce problème, nous devons mapper les ports de la connexion exécutant web_demo, etLes liens du réseau externe sont mappés vers notre hôte local , nous utilisons l'accès par connexion locale pour résoudre ce problème de proxy. Pratiquons-le maintenant.

Insérer la description de l'image ici

Comprenons d'abord comment fonctionne le mappage des ports de la machine de développement sur la base d'un diagramme :

Vous trouverez ci-dessous des étapes pratiques. Comprenez d’abord comment effectuer le mappage des ports.

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

Ce qui précède est une commande de mappage de port. Exécutez cette commande sur l'hôte pour effectuer le mappage de port. Voici un organigramme pour comprendre le processus de mappage de port :

Insérer la description de l'image ici

Le PC personnel se connectera à distance au seul port exposé 37367 de la machine de développement (ceci est mentionné lors de SSH, et le port exposé de chaque machine de développement est différent) et définira les options du tunnel. Le port exposé sert de station de transit pour l'acheminement du trafic.

  • -C: Activez la compression pour réduire la quantité de données transférées.
  • -N: N'exécute pas de commandes à distance, établit uniquement des tunnels.
  • -g: Autoriser les hôtes distants à se connecter aux ports transférés localement.

Lorsque cette commande SSH est exécutée sur un PC personnel, le client SSH écoutera sur le port 7860 de la machine locale.

Tout trafic envoyé vers le port local 7860 sera transmis par le tunnel SSH vers le port 7860 sur l'adresse 127.0.0.1 du serveur distant.

Cela signifie que même si ce port de la machine de développement n'est pas directement exposé au réseau externe, nous pouvons accéder en toute sécurité aux services du serveur distant via ce tunnel. .

2.3.2 Comment effectuer le mappage des ports ?
2.3.2.1 Utiliser la commande ssh pour le mappage des ports

Nous allons toujours à l'interface de la machine de développement, trouvons notre machine de développement et cliquonsServices personnalisés, copiez la première commande,
Insérer la description de l'image ici

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

Présentons-lui la signification de chaque partie de la commande :

  • -p 37367: Spécifie le port pour la connexion SSH à 37367, mentionné précédemment.
  • [email protected]: Indique à utiliser root L'identité de l'utilisateur se connecte àssh.intern-ai.org.cn cet hôte.
  • -CNg
    • -C Généralement utilisé pour activer la compression.
    • -N Indique que les commandes à distance ne sont pas exécutées, mais que seules les connexions sont établies pour la redirection de port, etc.
    • -g Autoriser les hôtes distants à se connecter aux ports transférés localement.
  • -L {本地机器_PORT}:127.0.0.1:{开发机_PORT}: Il s'agit de configurer la redirection de port local pour transférer le port spécifié de la machine locale (en {本地机器_PORT} représente) transmis à l'hôte distant (ici, c'est-à-diressh.intern-ai.org.cn)de 127.0.0.1 (c'est-à-dire l'adresse de bouclage locale) et le port de la machine de développement spécifié (défini par{开发机_PORT} exprimer).
  • -o StrictHostKeyChecking=no: désactivez la vérification stricte des clés d'hôte pour éviter les invites ou les erreurs dues à des clés d'hôte inconnues lors de la première connexion.

Lorsque vous exécutez une démo Web, vous pouvez utiliser cette commande pour effectuer un mappage de port, par exemple :

Nous créons un fichier hello_world.py (clic droit sur l'interface de la machine de développement pour créer le fichier et changeons le nom en hello_world.py) et remplissons le contenu suivant dans le fichier :

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

N'oubliez pas après l'éditionctrl+ssauvegarder

Avant d'exécuter le code, vous devez utiliserpip install gradio==4.29.0Commande pour installer les packages de dépendances suivants (copiez et collez la commande dans le terminal), puis exécutez-en un dans le terminal de Web IDEpython hello_world.pyCommande

Insérer la description de l'image ici

Si le mappage des ports n’est pas effectué, il n’est pas accessible via l’adresse IP locale.

Insérer la description de l'image ici

Je peux le saisir dans PowerShell à l'aide de la commande suivante :

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

Insérer la description de l'image ici

Cela représente le succès. (Avis: Cette commande ne renvoie aucun contenu, ce qui signifie que le mappage de port est en cours d'exécution, et vous pouvez ensuite voir l'interface de l'interface utilisateur Web en ouvrant la connexion dans la page Web)

Insérer la description de l'image ici

2.3.2.2 Utiliser vscode pour le mappage des ports

Bien sûr, si nous exécutons différentes interfaces utilisateur Web, nous devons saisir des commandes à plusieurs reprises, ce qui est très gênant, et nous devons utiliser VScode.Nous avons connecté la machine de développement à distance via SSH. VScode fournit un mappage automatique des ports. Nous n'avons pas besoin de le configurer manuellement. Nous pouvons utiliser la touche de raccourci "Ctrl+Shift+~".Réveillez le terminal, les options de port se trouvent sur le côté droit du terminal :

Insérer la description de l'image ici

Ici, vous pouvez afficher les informations de mappage de port. Si vous devez modifier le port, vous pouvez modifier le numéro de port dans la colonne du port.

3. Commandes Linux de base

Dans cette partie, je vais vous faire comprendre certains aspects de LinuxOpérations de base , et utilisez quelques outils. Afin que chacun puisse le résoudre par lui-même lorsqu'il rencontre des problèmes, vous pouvez également commenter ici et je vous répondrai à temps.

parce que nous utilisonsMachine de développementrarement utiliségestion des autorités , nous ne le présenterons donc pas. (Les opérations suivantes sont toutes effectuées dans le terminal VScode)

3.1 Gestion des fichiers

Sous Linux, les opérations courantes de gestion de fichiers incluent :

  • Créer un fichier:peut utiliser touch La commande crée un fichier vide.
  • Créer un répertoire:utiliser mkdir Commande.
  • Changement de répertoire:utilisercdCommande.
  • Afficher le répertoire:utiliserpwdCommande.
  • Afficher le contenu du fichier: Si utilisé cat Afficher directement tout le contenu du fichier,more etless Peut être consulté en pages.
  • Modifier le fichier:comme vi ouvim Attendez l'éditeur.
  • Copier des fichiers:utiliser cp Commande.
  • Créer un lien de fichier:utiliserlnCommande.
  • Déplacer des fichiers:passer mv Commande.
  • Supprimer les fichiers:utiliser rm Commande.
  • supprimer le répertoirermdir(Seuls les répertoires vides peuvent être supprimés) ou rm -r(Les répertoires non vides peuvent être supprimés).
  • Rechercher des fichiers:Peut utiliser find Commande.
  • Afficher les détails d'un fichier ou d'un répertoire:utiliserlscommande, comme l'utilisation ls -lAfficher des informations détaillées sur les fichiers d'un répertoire.
  • Traiter les fichiers: Pour les opérations de fichiers complexes, vous pouvez utilisersedCommande.

Voici plusieurs commandes que nous utiliserons dans le cours :

3.1.1 touche

Nous pouvons utiliser le toucher pour créer rapidement des fichiers, nous n'avons donc pas besoin de cliquer manuellement pour les créer.Par exemple, nous souhaitons créer undemo.pydocument:

3.1.2 mkdir

De la même manière, si vous souhaitez créer un fichier nommétestAnnuaire:

Insérer la description de l'image ici

3.1.3 CD

Cette commande sera la commande la plus couramment utilisée. Avant de l'utiliser, vous devez expliquer la structure des répertoires aux étudiants qui n'ont pas de compétences en informatique et faire un dessin pour que tout le monde puisse comprendre :

Insérer la description de l'image ici

Ce que nous utilisons maintenant, c'estrootrépertoire, qui est également le répertoire personnel de l'utilisateur root.~, dans le système d'exploitation Linux/Représente le répertoire racine. Il existe de nombreux répertoires et fichiers requis par le système dans le répertoire racine. Le répertoire que nous venons de créer existe avec.rootrépertoire, parmi lesquels.Représente le répertoire courant,.. Le répertoire parent représenté.Si je devais entrer maintenanttestrépertoire, puis revenez àrootAnnuaire, nous pouvons faire ceci :

3.1.4 mot de passe

on peut utiliserpwdCommande pour afficher le répertoire actuel : Cela nous permet de déterminer plus facilement dans quel répertoire nous nous trouvons actuellement.

Insérer la description de l'image ici

3.1.5 chat

catLa commande peut afficher le contenu du fichier et d'autres commandes peuvent être utilisées--helpCommande pour afficher :

  • -a, --show-all est équivalent à -vET
  • -b, –numéro-nombre non vide de lignes de sortie non vides, remplace -n
  • -e, équivalent à -vE
  • -E, --show -end affiche $ à la fin de chaque ligne
  • -n, --number numérote toutes les lignes de sortie
  • -s, --crick-blank supprime les lignes de sortie vides répétées
  • -t est équivalent à -vT
  • -t, --show-tabs affiche les caractères de tabulation sous la forme ^I
  • -v, --show utilise la notation ^ et M, sauf LFD et TAB
3.1.6 vi ou vim

Nous pouvons l'utiliser lorsque nous devons éditer des fichiersviouvimcommande, lorsque vous entrez dans l’édition de fichiers, il existe trois modes :

Insérer la description de l'image ici

Entrez en mode édition pour utiliseri, l'avantage de vim est que vous pouvez effectuer de simples modifications de fichiers dans le terminal.

3.1.7 cp et ln (souligné)

**cp**La commande sera fréquemment utilisée dans les cours suivants. Elle est utilisée pour copier un fichier ou un répertoire vers un autre répertoire. Les utilisations courantes incluent :

  • Copier des fichiers :cp 源文件 目标文件
  • Copier le répertoire :cp -r 源目录 目标目录

Mais si l'on veut utiliser le modèle, cette opération prendra beaucoup d'espace disque, on utilise donc généralementln commande, c'est la même chose que le raccourci Windows. Il existe deux types de liens sous Linux :lien physique(lien physique) aveclien logiciel (lien symbolique), un lien physique signifie qu'un fichier peut avoir plusieurs noms, tandis qu'un lien symbolique génère un fichier spécial dont le contenu pointe vers l'emplacement d'un autre fichier. Les liens physiques existent dans le même système de fichiers, mais les liens symboliques peuvent s'étendre sur différents systèmes de fichiers.

Par conséquent, nous utilisons généralement des connexions souples. Ses méthodes d’utilisation courantes sont les suivantes :

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

Les paramètres sont les suivants :

  • -s : La création de liens symboliques (liens symboliques) est également la plus couramment utilisée ;
  • -f : forcer l'exécution, écraser les fichiers cibles existants ;
  • -i : mode interactif, si le fichier existe, l'utilisateur sera invité à l'écraser ;
  • -n : traite les liens symboliques comme des répertoires généraux ;
  • -v : Afficher le traitement détaillé.
3.1.8 mv et rm

mvcommande etrmLes commandes sont utilisées de la même manière, maismvIl est utilisé pour déplacer des fichiers ou des répertoires et peut également être renommé.rmLa commande est utilisée pour supprimer des fichiers ou des répertoires.

Les méthodes couramment utilisées sont les suivantes :

  • commande mv

Paramètres couramment utilisés :

  • -i: Mode interactif, demander avant d'écraser.
  • -f: Forcer la couverture.
  • -u: Déplacez-le uniquement si le fichier source est plus récent que le fichier cible.

Exemple d'utilisation :

  • mv file1.txt dir1/: déplacer le fichier file1.txt Déplacer vers le répertoiredir1 milieu.

  • mv file1.txt file2.txt: déplacer le fichier file1.txt Renommer enfile2.txt

  • commande rm

Paramètres couramment utilisés :

  • -i: Mode interactif, demander avant de supprimer.
  • -f: Suppression forcée, ignorant les fichiers inexistants, sans demande de confirmation.
  • -r:Supprimer de manière récursive un répertoire et son contenu.

Exemple d'utilisation :

  • rm file.txt:Supprimer les fichiers file.txt
  • rm -r dir1/ : Supprimer récursivement des répertoires dir1 et tout son contenu.

La commande pour supprimer un répertoire peut également être utiliséermdir

3.1.9 trouver

findLa commande est un puissant outil de recherche de fichiers dans le système Linux. Elle peut trouver des fichiers ou des répertoires qui remplissent les conditions dans le répertoire spécifié et ses sous-répertoires et effectuer les opérations correspondantes.

Ce qui suit estfindQuelques utilisations courantes de la commande :

  1. Rechercher par nom de fichier:utiliser-name option pour rechercher des fichiers par nom de fichier. Par exemple,find /path/to/directory -name "file.txt"recherchera le répertoire spécifié et ses sous-répertoires nommésfile.txtdocument.
  2. Rechercher par type de fichier:utiliser-type option pour rechercher des fichiers par type de fichier. Par exemple,find /path/to/directory -type fTous les fichiers ordinaires du répertoire spécifié et de ses sous-répertoires seront trouvés.
  3. Rechercher par taille de fichier:utiliser-size option pour rechercher des fichiers par taille de fichier. Par exemple,find /path/to/directory -size +100MTrouvera les fichiers de plus de 100 Mo dans le répertoire spécifié et ses sous-répertoires.
  4. Recherche par heure de modification:utiliser-mtime-atimeou-ctime Les options recherchent les fichiers en fonction de leur heure de modification, de leur heure d'accès ou de leur heure de changement de statut. Par exemple,find /path/to/directory -mtime -7Trouvera les fichiers dans le répertoire spécifié et ses sous-répertoires qui ont été modifiés dans les 7 jours.
  5. Rechercher par autorisations de fichier:utiliser-perm option pour rechercher des fichiers en fonction des autorisations de fichiers. Par exemple,find /path/to/directory -perm 755Trouvera les fichiers avec l'autorisation 755 dans le répertoire spécifié et ses sous-répertoires.
  6. Rechercher par utilisateur ou groupe:utiliser-userou-group Les options recherchent les fichiers par leur propriétaire ou leur groupe. Par exemple,find /path/to/directory -user usernameRecherchera le répertoire spécifié et ses sous-répertoires appartenant à l'utilisateurusernamedocument.
  7. effectuer des opérations:utiliser-exec Les options peuvent effectuer les opérations correspondantes sur les fichiers trouvés. Par exemple,find /path/to/directory -name "*.txt" -exec rm {} ;supprimera tous les trouvés se terminant par.txtfichier à la fin.
3.1.10 ls

lsLa commande peut être utilisée pour lister le contenu d'un répertoire ainsi quedétails

Les paramètres et méthodes d'utilisation couramment utilisés sont les suivants :

  • -a: Afficher tous les fichiers et répertoires, y compris les fichiers cachés (au-delà.fichier ou répertoire commençant par .).
  • -l: Affiche des informations détaillées au format long, y compris les autorisations de fichiers, le propriétaire, la taille, l'heure de modification, etc.
  • -h:et-lUtilisé en combinaison pour afficher la taille du fichier d'une manière lisible par l'homme (par ex.KMGattendez).
  • -R: Répertorie le contenu des sous-répertoires de manière récursive.
  • -t : Affichage par ordre d'heure de modification des fichiers. ,

Insérer la description de l'image ici

3.1.11 sed

sedCommand est un éditeur de flux, principalement utilisé pour le traitement de texte. Il est souvent utilisé lors du traitement d'opérations de fichiers complexes. Il sera utilisé dans les cours ultérieurs.sedLes paramètres couramment utilisés et les exemples d'utilisation de commandes sont les suivants :

  • Description du paramètre :
    • -e<script> ou--expression=<script>: Spécifiez les scripts directement dans la ligne de commande pour le traitement de texte.
    • -f<script文件> ou--file=<script文件>: lit le script à partir du fichier de script spécifié pour le traitement de texte.
    • -n ou--quiet ou--silent: Imprimez uniquement les résultats de sortie traités par le script et n'imprimez pas les lignes sans correspondance.
  • Description des actions :
    • a: ajoute la chaîne de texte spécifiée à la ligne suivante de la ligne actuelle.
    • c: remplace la plage de lignes spécifiée par la chaîne de texte spécifiée.
    • d: supprime la ligne spécifiée.
    • i: ajoute la chaîne de texte spécifiée à la ligne précédente de la ligne actuelle.
    • p : Imprime les lignes sélectionnées.généralement avec-n Utilisées avec les paramètres, seules les lignes correspondantes sont imprimées.
    • s : Utilisez des expressions régulières pour le remplacement de texte. Par exemple,s/old/new/g Remplacez tous les « InternLM » par « InternLM yyds ».
  • Exemple:

Insérer la description de l'image ici

utilisé dans l'exempleechocommande, c'est la même chose qu'en pythonprintIdem, utilisé pour imprimer le contenu, utilisez ici le caractère pipe>Imprimez InternLM dans un fichier. Les caractères pipe couramment utilisés incluent.<et|, on peut par exemple utilisergrepCommande pour afficher les inclusions installées en pythonosForfait terrain :

Insérer la description de l'image ici

grep Est un puissant outil de recherche de texte. Les paramètres couramment utilisés sont les suivants :

  • -i: Recherche quelle que soit la casse.
  • -v: Inverse la correspondance, c'est-à-dire affiche les lignes sans correspondance.
  • -n: Afficher le numéro de ligne.
  • -c: Comptez le nombre de lignes correspondantes.

3.2 Gestion des processus

La gestion des processusLes commandes sont des outils importants pour la surveillance du système et la gestion des processus. Les commandes de gestion des processus couramment utilisées sont les suivantes :

  • ps: Afficher les processus en cours
  • haut:Affichage dynamique des processus en cours d'exécution
  • arbre de ps : Afficher les processus en cours dans l'arborescence
  • pgrep: utilisé pour trouver des processus
  • bon:Changer la priorité d'un processus
  • emplois: Afficher les informations relatives au processus
  • bg et fg : déplacer le processus en arrière-plan
  • tuer: tuer le processus

Il existe également une commande spéciale dans la machine de développementnvidia-smi , qui est un outil de ligne de commande pour l'interface de gestion système NVIDIA, utilisé pour surveiller et gérer les périphériques GPU NVIDIA. Il fournit un moyen rapide d'afficher des informations telles que l'état du GPU, son utilisation, la température, l'utilisation de la mémoire, la consommation d'énergie et les processus exécutés sur le GPU.

Voici des exemples d'utilisation de chaque commande :

  • ps : Répertoriez les processus dans le système actuel. Différentes informations sur le processus peuvent être affichées à l'aide de différentes options, telles que :
    • ps aux  # 显示系统所有进程的详细信息
      
      • 1
  • top : Afficher dynamiquement l’état des processus dans le système. Il met à jour la liste des processus en temps réel, affichant les processus ayant la plus grande utilisation du processeur et de la mémoire.
    • top  # 启动top命令,动态显示进程信息
      
      • 1
  • pstree: affiche les processus en cours d'exécution et leurs relations parent-enfant sous la forme d'un diagramme arborescent.
    • pstree  # 显示进程树
      
      • 1
  • pgrep : Rechercher les processus correspondant aux critères. Vous pouvez rechercher des processus en fonction du nom du processus, de l'utilisateur et d'autres conditions.
    • pgrep -u username  # 查找特定用户的所有进程
      
      • 1
  • nice: Changer la priorité d'un processus.nice Plus la valeur est faible, plus la priorité du processus est élevée.
    • nice -n 10 long-running-command  # 以较低优先级运行一个长时间运行的命令
      
      • 1
  • jobs: affiche une liste des tâches de la session de terminal en cours, y compris les processus exécutés en arrière-plan.
    • jobs  # 列出当前会话的后台作业
      
      • 1
  • bg etfgbg Mettez le processus suspendu à s'exécuter en arrière-plan,fg Ramenez le processus en arrière-plan au premier plan.
    • bg  # 将最近一个挂起的作业放到后台运行
      fg  # 将后台作业调到前台运行
      
      • 1
      • 2
  • kill: Envoie un signal au processus spécifié, généralement utilisé pour tuer le processus.
    • kill PID  # 杀死指定的进程ID
      
      • 1
    • Avis,kill La commande est envoyée par défautSIGTERM Signal, qui peut être utilisé si le processus ne répond pas-9utiliserSIGKILL Signal tue avec force le processus :

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

SIGTERM Le signal (Signal Termination) est un signal standard utilisé dans les systèmes d'exploitation Unix et de type Unix pour demander la fin du processus. Ce signal est généralement envoyé lorsque le système ou l'utilisateur souhaite arrêter correctement un processus.etSIGKILLLes signaux sont différents,SIGTERM Les signaux peuvent être capturés et traités par un processus, permettant au processus de nettoyer avant de quitter. (depuis Internet)

Ce qui suit est nvidia-smi Quelques utilisations de base des commandes :

  • Afficher des informations récapitulatives sur l'état du GPU :
    • nvidia-smi
      
      • 1
  • Afficher des informations détaillées sur l'état du GPU :
    • nvidia-smi -l 1
      
      • 1
    • Cette commande mettra à jour les informations d'état toutes les 1 secondes.

  • Afficher l'historique d'utilisation du GPU :
    • nvidia-smi -h
      
      • 1
  • Répertoriez tous les GPU et affichez leurs PID et noms de processus :
    • nvidia-smi pmon
      
      • 1
  • Mettre fin de force au processus GPU spécifié :
    • nvidia-smi --id=0 --ex_pid=12345
      
      • 1
    • Cela mettra fin de force au processus avec le PID 12345 sur l'ID GPU 0.

  • Définir le mode de performances du GPU :
    • nvidia-smi -pm 1
      nvidia-smi -i 0 -pm 1
      
      • 1
      • 2
    • La première commande définira tous les GPU en mode performance, la deuxième commande cible uniquement le GPU avec l'ID 0.

  • Redémarrez le GPU :
    • nvidia-smi --id=0 -r
      
      • 1
    • Cela redémarrera le GPU avec l'ID 0.

  • Afficher les informations d'aide :
    • nvidia-smi -h
      
      • 1

Ce qui suit est une introduction aux informations sur le GPU à travers une image :

Insérer la description de l'image ici

3.3 Utilisation de l'outil

Voici un outilTMUXTMUX est un multiplexeur de terminaux. Cela permet de basculer facilement entre plusieurs terminaux, de les détacher (cela ne tue pas les terminaux, ils continuent de fonctionner en arrière-plan) et de les reconnecter à d'autres terminaux. Pourquoi introduire cet outil ?Parce que ce sera fait plus tardXtunerLors du réglage fin du modèle, cela prendra beaucoup de temps.TmuxCela peut résoudre la situation dans laquelle le programme est arrêté et interrompu. Voici comment l'installer et l'utiliser.

Étant donné que la machine de développement utilise le système d'exploitation Ubuntu, vous pouvez utiliserlsb_release -a Commande pour afficher les informations du système Ubuntu :

Insérer la description de l'image ici

puis utilisezapt install tmuxCommande pour installer tmux. Vous pouvez l'utiliser une fois l'installation terminée.tmuxVous pouvez utiliser tmux avec la commande Si vous souhaitez quitter tmux, vous pouvez utiliser ".Ctrl+d"touche de raccourci.

Sur la machine de développement, seuls les fichiers sous le chemin /root sont stockés de manière persistante. Les logiciels installés sous d'autres chemins seront réinitialisés après le redémarrage.

Les méthodes d'utilisation spécifiques peuvent être consultées sur :

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

4. Introduction à Conda et Shell (supplémentaire)

Conda est un système open source de gestion de packages et de gestion d'environnement qui fonctionne sous Windows, macOS et Linux. Il installe, exécute et met à jour rapidement les progiciels et leurs dépendances. En utilisant Conda, vous pouvez facilement créer, enregistrer, charger et changer différents environnements sur votre machine locale.

Déjà installé sur la machine de développementconda, nous pouvons l'utiliser directement, et il y en a aussi un intégré dans la machine de développementcondaCommandestudio-conda, nous présenterons ci-dessouscondaUtilisation de base de, etstudio-condaComment utiliser et présenterstudio-condaComment est-il réalisé.

Nous le présenterons dans les parties suivantes :

  1. paramètres conda
  2. gestion de l'environnement conda
  3. conda et pip
  4. Studio-conda est utilisé avec Shell (extension)

4.1 paramètres conda

on peut utiliserconda --versionpour voir la machine de développement actuellecondainformation sur la version:

Insérer la description de l'image ici

quand on veut utilisercondaL'installation du package sera très lente. Nous pouvons définir la mise en miroir domestique pour améliorer la vitesse d'installation. L'exemple est le suivant :

#设置清华镜像
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

Mais nous utilisons habituellementpipInstallation du package, nous le présenterons plus tardpipetcondadifférence.

Si nous voulons afficher les informations de configuration de conda, nous pouvons utiliserconda config --showcommande, si c'est le paramètre par défaut de la machine de développement, elle renverra : (une partie de l'information)

Insérer la description de l'image ici

Ces configurations sont enCondaLa configuration de l'environnement affectera les méthodes et les résultats de l'installation des progiciels, des mises à jour, de la gestion de l'environnement et d'autres opérations.

4.2 Gestion de l'environnement conda

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

4.2.1 Créer un environnement virtuel

on peut utiliserconda create -n name python``=3.10 Créez un environnement virtuel, ce qui signifie qu'un environnement virtuel avec la version 3.10 et le nom de Python est créé.Après la création, vous pouvez.condasous le répertoireenvsTrouvé dans l'annuaire.

Insérer la description de l'image ici

Lorsque la version de Python n'est pas spécifiée, un environnement virtuel basé sur la dernière version de Python sera automatiquement créé. En parallèle, nous pouvons installer les packages nécessaires lors de la création de l'environnement virtuel :conda create -n name numpy matplotlib python=3.10(Mais je ne vous recommande pas de l'utiliser de cette façon)

Les paramètres courants pour créer un environnement virtuel sont les suivants :

  • -n ou --name : Spécifiez le nom de l'environnement à créer.
  • -c ou --channel : spécifiez des canaux de package supplémentaires.
  • –clone : Cloner un environnement existant pour créer un nouvel environnement.
  • -p ou --prefix : spécifiez le chemin d'installation de l'environnement (emplacement autre que celui par défaut).
4.2.2 Vérifiez quels sont les environnements virtuels existants

Si nous voulons voir de quels environnements virtuels nous disposons, nous pouvons utiliser la commande suivante :

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

Insérer la description de l'image ici

En même temps, nous pouvons également voir le répertoire où se trouve l’environnement.

4.2.3 Activation et sortie de l'environnement virtuel

Après avoir créé l'environnement virtuel, nous pouvons utiliserconda activate name commande pour activer l'environnement virtuel, comment vérifier si le changement est réussi ?C'est facile, il suffit de regarder(base)Qu'il s'agisse du nom de l'environnement virtuel créé.

Insérer la description de l'image ici

Si vous souhaitez quitter l'environnement virtuel, vous pouvez utiliser :

conda activate
conda deactivate
  • 1
  • 2

Les deux commandes reviendrontbasel'environnement parce quebaseC'est l'environnement de base de conda. Si vous observez attentivement,baseLe répertoire d'environnement est d'un niveau supérieur à celui des autres répertoires d'environnement virtuel.

4.2.4 Supprimer et exporter l'environnement virtuel

Si vous souhaitez supprimer un environnement virtuel, vous pouvez utiliserconda remove --name name --all, si vous supprimez uniquement un ou plusieurs packages dans l'environnement virtuel, vous pouvez utiliserconda remove --name name package_name

L'exportation d'un environnement virtuel est très nécessaire pour un environnement spécifique, car les dépendances de certains progiciels sont très complexes, et il sera difficile de le recréer et de le configurer vous-même. Si nous exportons l'environnement configuré, nous pourrons le restaurer la prochaine fois. et vous pouvez également partager la configuration avec d'autres.

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

Par exemple nous allonsxtuner0.1.17L'environnement virtuel est exporté et les informations de configuration sont les suivantes :

Insérer la description de l'image ici

Ceux-ci inclusnom de l'environnementL'emplacement du référentiel en ligne pour les packages d'environnement virtueletDépendances de l'environnement virtuel . Plus tard, nous utiliserons des méthodes d'utilisation avancées pour restaurer rapidement l'environnement virtuel.

4.3 conda et pip

Dans cette partie, nous présentons quelquescondaetpipQuelques différences :

  1. conda peut gérer les packages non-python et pip ne peut gérer que les packages python.
  2. conda peut être utilisé pour créer un environnement virtuel, mais pip ne peut pas et doit s'appuyer sur des packages tels que virtualenv.
  3. Le package installé par conda est compiléfichier binaire, les packages dépendants seront automatiquement installés lors de l'installation des fichiers de package ; les packages installés par pip sont ;roue ou code source, les dépendances autres que le langage python ne seront pas prises en charge pendant le processus d'installation.
  4. Les packages installés par conda seront téléchargés dans le répertoire correspondant à l'environnement virtuel actuel et pourront être téléchargés une fois et installés plusieurs fois. pip est téléchargé directement dans l'environnement correspondant.

Roue Il s'agit d'un format de package d'installation Python.

Il s'agit d'un format de distribution binaire précompilé, similaire aux binaires compilés dans conda.

Les principaux avantages du format Wheel sont les suivants :

  1. Installation rapide : comme il a été précompilé, il n'est pas nécessaire de passer par le processus de compilation comme l'installation du code source lors de l'installation, ce qui permet de gagner du temps.
  2. Cohérence : garantit que les résultats de l'installation sont cohérents sur les différents systèmes et environnements.

Par exemple, si vous souhaitez installer une grande bibliothèque Python, l'utilisation du format Wheel peut éviter les problèmes d'installation causés par les différences d'environnements de compilation sur différentes machines. De plus, pour les systèmes qui ne disposent pas d'environnement de compilation ou qui ont de faibles capacités de compilation, le format Wheel peut rendre le processus d'installation plus fluide.

4.4 Utilisation de Studio-conda et Shell (extension)

Cette partie est une partie étendue, car je pense que cette partie est très intéressante et très pratique, donc si vous êtes intéressé, vous pouvez l'apprendre.

Présentons d'abordstudio-conda , qui est une commande intégrée de la machine de développement et est implémentée via un script Shell. Qu’est-ce qu’un script Shell ?

Script shell Fichier texte contenant une série de commandes disposées dans un ordre spécifique pour automatiser les tâches dans un environnement Unix/Linux ou un système d'exploitation similaire.

Les scripts Shell sont généralement écrits dans le langage Shell. Les langages Shell courants tels que Bash, Sh, etc. sont les commandes Linux de base que nous avons présentées précédemment et qui appartiennent au langage Shell.

Il présente les caractéristiques importantes suivantes :

  1. automatisation : Une série d'opérations répétitives et complexes peut être écrite sous forme de script, puis simplement exécuter le script pour automatiser ces opérations, permettant ainsi de gagner du temps et de réduire les erreurs. Par exemple, un script qui sauvegarde régulièrement les fichiers importants chaque jour.
  2. La gestion du système : Utilisé pour gérer la configuration du système, les autorisations des utilisateurs, le contrôle des processus, etc. Par exemple, un script qui crée un nouvel utilisateur et définit ses autorisations.
  3. Le traitement par lots : Possibilité de traiter plusieurs fichiers ou données simultanément. Par exemple, un script qui convertit un lot de fichiers image d'un format à un autre.
  4. contrôle de processus: Comme le jugement conditionnel (if-else), la boucle (for, while), etc., permettant aux scripts d'effectuer différentes opérations selon différentes situations.

Questudio-condaCela fait partie de l'automatisation. Le fichier de configuration de l'environnement bash de l'utilisateur root dans notre machine de développement est..bashrc, mais en fait le fichier de configuration principal est/share/.aide/config/bashrc, certaines commandes écrites dans ce fichier nous permettent d'effectuer certaines opérations plus rapidement, telles que :

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

exportest utilisé pour définir des variables d'environnement.aliasconsiste à copier un fichier sh dans une variable. Cela peut être exécuté dans le terminal sous forme de commande.studio-condaC'est ça.

icistudio-smiIl est utilisé pour vérifier l'utilisation de la mémoire virtuelle lors de l'ouverture./share/studio-smiLe fichier peut être consulté :

#!/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

Ce script est utilisé pour vérifier s'il existe un vgpu-smi commande, si présente, elle sera exécutéevgpu-smi pour afficher les informations d'état d'un GPU virtuel (vGPU) s'il n'est pas présent, il s'exécuteranvidia-smi pour afficher les informations sur l'état du GPU NVIDIA. Comme indiqué ci-dessous:

Insérer la description de l'image ici

nvidia-smi est un outil de surveillance et de gestion des périphériques GPU NVIDIA physiques, etvgpu-smi Conçu pour surveiller et gérer les ressources GPU virtualisées via la technologie NVIDIA vGPU.

nous voyons/share/install_conda_env.shLe contenu du fichier est le suivant :

#!/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

l'un d'eux*list*()Attends, c'est toutstudio-condafonction, qui peut implémenter certaines opérations, par exemple, nous pouvons utiliserstudio-conda env listPour afficher l'environnement par défaut :

Insérer la description de l'image ici

dans*clone*()La fonction principale de la fonction est de copier l'environnement, mais elle ne peut être copiée qu'à partir de l'environnement par défaut. Le code principal est en fait :

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

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

Décompressez le package compressé de l'environnement prédéfini, puis créez un environnement virtuel via le clonage. Cependant, une certaine logique est également définie dans le script Shell, mais ce n'est qu'un jugement. Si vous êtes familier avec un langage de programmation, vous devriez pouvoir. pour le comprendre. Si vous ne pouvez pas le comprendre, ce n'est pas non plus un gros problème.

Alors, comment pouvons-nous ajouter notre propre environnement créé àstudio-condaEt le milieu ?

La première étape consiste à créer un nouvel environnement conda sous /share/conda_envs

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

La deuxième étape consiste à copier les fichiers sous /root/.conda/pkgs sur la machine locale vers /share/pkgs, à les recompresser et à les remplacer (cette étape consiste à stocker les grands packages publics pendant le processus de création de conda pour éviter les téléchargements répétés).

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

cd /share && tar -zcvf paquets.tar.gz paquets

La troisième étape consiste à mettre à jour la fonction de liste dans install_conda_env.sh et à ajouter une nouvelle description de l'environnement conda.

Ce qui précède est la méthode fournie par défaut par la machine de développement. En fait, il existe une autre méthode, que nous avons utilisée précédemment.condaExportéxtuner0.1.17Fichiers de configuration pour les environnements virtuels, nous pouvons utiliserconda env create -f xtuner0.1.17.yml commande pour restaurer l’environnement virtuel.Écrivons un script Shell simple pour implémenter cette opération : Nous créonstest.shfichier, écrivez le contenu suivant :

#!/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

Une fois la création du script Shell terminée, nous devons accorder des autorisations au script. Vous pouvez utiliser la commande :chmod +x test.sh , puis entrez./test.sh restore xtuner0.1.17Et appuyez sur Entrée pour restaurer l'environnement virtuel.

Insérer la description de l'image ici

Cependant, ce n'est pas très différent de l'utilisation directe. Si l'on compare cette opération à l'opération dans la machine de développement,studio-conda Combiner les commandes sera très pratique, mais les méthodes de copie de l'environnement sont différentes.Par conséquent, si vous souhaitez le mettre en œuvre, vous devez/share/install_conda_env.shLa logique du fichier est modifiée.

D'accord, c'est tout le contenu de ce niveau. J'espère que le contenu ci-dessus sera utile à tout le monde à l'avenir. Si vous souhaitez en savoir plus sur Linux, vous pouvez lire mon article de blog, même si je ne sais pas comment utiliser Linux. , cela nous sera utile d'apprendre. Les grands modèles n'ont pas beaucoup d'impact, mais si vous apprenez bien Linux, cela rendra votre apprentissage des grands modèles très fluide. Enfin, n’oubliez pas de terminer les niveaux que nous avons fixés plus tôt !

Lien du blog :Linux

Problème commun

1. L'environnement de la machine de développement InternStudio est cassé. Comment initialiser l'environnement de la machine de développement ?

Exécutez avec soin ! ! ! !Toutes les données seront perdues. Ceci n'est disponible que sur la plateforme InternStudio. Ne faites pas cela sur votre propre machine.

  • La première étape consiste à connecter le terminal local à la machine de développement via ssh (doit être connecté via ssh pour fonctionner, pas sur le web !!!)
  • Exécution de la deuxième étape rm -rf /root, il faudra environ 10 minutes d'attente
  • La troisième étape consiste à redémarrer la machine de développement. Le système réinitialisera le fichier de configuration dans le chemin /root.
  • la quatrième étape ln -s /share /root/share

Mission de niveau

Pour réussir la mission de niveau, vous devez prendre des captures d'écran par étapes clés :

détails de la missionTemps nécessaire pour terminer
MissionTerminez la connexion SSH et le mappage des ports et exécutezhello_world.py10 minutes
Tâche facultative 1Complétez les commandes Linux de base sur la machine de développement10 minutes
Tâche facultative 2Utilisez VSCODE pour vous connecter à distance à la machine de développement et créer un environnement conda10 minutes
Tâche facultative 3Créer et exécutertest.shdocument10 minutes