Condivisione della tecnologia

Livello 1: Conoscenza base di Linux

2024-07-12

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

Prefazione

Questo articolo costituisce gli appunti del terzo campo di pratica modello su larga scala per studiosi ospitato dal Laboratorio di Intelligenza Artificiale di Shanghai. È destinato solo a riferimento da parte di individui e assistenti didattici durante la correzione dei compiti.Link originale del tutorial
Per registrarti, cerca "The Third Scholar Model Practice Camp" su WeChat.
Questa nota è una nota annotata personalmente modificata in base al tutorial originale.

Livello Linux+InternStudio

😀Hello大家好,欢迎来到Modello grande da studiosoCampo pratico, ecco un corso base preparato dal campo pratico per gli studenti che partecipano al campo pratico per la prima volta e per studenti di vari settori che non hanno una conoscenza di base di Linux. Qui ti insegneremo come usarloMacchina di sviluppo InternStudioe padroneggiare alcune nozioni di baseConoscenza di Linux , in modo che tutti non abbiano idea da dove cominciare nei corsi successivi. Spero che possa essere utile a tutti. Abbiamo preparato alcune attività di livello per te nelle attività di livello qui Quando completi le attività di livello richieste ed effettui il check-in, riceverai la ricompensa in termini di potenza di calcolo del livello attuale.Iniziamo!

1. Introduzione alla macchina di sviluppo InternStudio

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

Se vuoi saperne di più su InternStudio, puoi consultare i seguenti documenti: InternStudio

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

Per prima cosa apri il collegamento qui sopra per accedere a InternStudio. Dopo aver effettuato l'accesso, passerai automaticamente all'interfaccia della console, come mostrato nella figura seguente:

Inserisci qui la descrizione dell'immagine

Lascia che ti dica le funzioni delle pagine corrispondenti a ciascun numero di serie:

  1. Qui puoi creareMacchina di sviluppo, nonché modificare la configurazione della macchina di sviluppo e visualizzare i registri correlati, ecc.

Inserisci qui la descrizione dell'immagine

  1. OK quiVisualizzazione Visualizza i file e le cartelle nella macchina di sviluppo Se crei due macchine di sviluppo, utilizzeranno lo stesso disco cloud. (Poiché ogni macchina di sviluppo è un contenitore Docker, viene montato un disco cloud di archiviazione. Per spiegazioni sui termini professionali, vedere: Spiegazione dei termini professionali) Qui è possibile caricare file o cartelle, creare file e visualizzare file nascosti.

Inserisci qui la descrizione dell'immagine

  1. Questa è una nuova funzione della macchina di sviluppo Se vuoi realizzare un progetto, puoi richiedere risorse all'assistente. La funzione del team è per tutti i membriRisorse informatiche condivise,避免造成资源浪费。(毕竟烧的可都是💴啊)
  2. Questo è usato per configurareChiave SSH, parleremo di come usarlo più tardi.
  3. L'ultimo posto è per modificare le tue informazioni personali e controllare il tuoRisorse informaticheuso specifico.

Quanto sopra è una breve introduzione alla piattaforma InternStudio Diamo un'occhiata a come creare una macchina di sviluppo Andiamo alla home page e facciamo clic su ".Creare una macchina di sviluppo

Inserisci qui la descrizione dell'immagine

Qui scegliamo di crearemacchina per lo sviluppo personale, di nometestCudaLa versione è 12.2,Assegnazione delle risorseSeleziona 10% e la durata predefinita va bene.

Una volta completata la creazione, inMacchina di sviluppoPuoi vedere la macchina di sviluppo appena creata sull'interfaccia. Fai clic per accedere alla macchina di sviluppo.

Inserisci qui la descrizione dell'immagine

Dopo essere entrati nella macchina di sviluppo, è possibile visualizzare la pagina principale della macchina di sviluppo. La macchina di sviluppo ha tre modalità tra cui scegliere:JupyterLab, terminale e VScode

Inserisci qui la descrizione dell'immagine

In:

  1. Laboratorio Jupyter: Un ambiente interattivo di programmazione e insegnamento con un terminale integrato che può facilmente visualizzare file, eseguire codice, ecc.
  2. terminale(Terminale, il più leggero): utilizzato principalmente per operazioni da riga di comando o esecuzione di script e programmi semplici
  3. Codice VSC: Il VSCode integrato nella pagina web può essere sviluppato anche da remoto tramite connessione SSH nel VSCode locale. Di seguito verrà spiegato come configurare la connessione remota.

Inserisci qui la descrizione dell'immagine

  1. Questo è l'utilizzo delle risorse, che verrà utilizzato nei corsi successivi.

2. SSH e mappatura delle porte

Abbiamo introdotto sopraPiattaforma InterStudio, e come creare una macchina di sviluppo In questa sezione vogliamo capire cosaSSHPerché utilizzare la connessione remota, Come utilizzare SSHconnessione remotaMacchina di sviluppo, cos'èMappatura dei portie come procedereMappatura dei porti

2.1 Cos'è SSH?

SSHIl nome completo è Secure Shell, che in cinese significa shell sicuraprotocollo di sicurezza della rete , realizzare l'accesso sicuro, il trasferimento di file e altri servizi attraverso meccanismi di crittografia e autenticazione. Il protocollo SSH fornisce servizi di rete sicuri in un ambiente di rete non sicuro crittografando e autenticando i dati di rete.

SSH è (architettura C/S) diserverEclientePer stabilire un canale SSH sicuro, entrambe le parti devono prima stabilire una connessione TCP, quindi negoziare il numero di versione e i vari algoritmi utilizzati e generare lo stessochiave di sessione utilizzato per la successiva crittografia simmetrica. Dopo aver completato l'autenticazione dell'utente, entrambe le parti possono stabilire una sessione per lo scambio di dati.

Poi lo faremo nella pratica successivaConfigura le chiavi SSH, la chiave di configurazione è tale da non dover inserire ripetutamente la password quando ci colleghiamo alla macchina di sviluppo in remoto, quindiPerché connettersi da remoto?

Il vantaggio della connessione remota è che se si utilizza un ufficio remoto, è possibile connettersi in remoto al computer di sviluppo tramite SSH, in modo da poter sviluppare localmente. E se hai bisogno di eseguire del codice locale e non disponi di un ambiente, la connessione remota è davvero necessaria.

2.2 Come utilizzare SSH per connettersi in remoto alla macchina di sviluppo?

2.2.1 Utilizzare la password per la connessione remota SSH

Innanzitutto, utilizziamo il metodo di immissione della password per la connessione remota SSH. Successivamente parleremo di come configurare l'accesso senza password.

Dopo aver completato la creazione della macchina di sviluppo, dobbiamo aprire il terminale powerShell del nostro computer e utilizzareTasto Win+R Utilizzare il tasto di scelta rapida per aprire la casella Esegui, immettere PowerShell e aprire il terminale PowerShell. (Se utilizzi il sistema operativo Linux o Mac, i seguenti passaggi sono gli stessi)

Torniamo alla piattaforma della macchina di sviluppo ed entriamoMacchina di sviluppoTrova la macchina di sviluppo che abbiamo creato nella pagina e fai clicConnessione SSH

Inserisci qui la descrizione dell'immagine

Inserisci qui la descrizione dell'immagine

quindi copiaComando di accesso, 37367 ecco la porta SSH utilizzata dalla macchina di sviluppo In genere, viene utilizzata la porta 22. Senza questo numero di porta, non è possibile connettersi a SSH e la porta di ognuno è diversa, quindi se ci si connette alla macchina di sviluppo non è possibile connettersi. , è necessario verificare se la porta è sbagliata.

Incolla il comando copiato in PowerShell e premi Invio. Qui dobbiamo inserire la password. Copiamo la password sotto il comando di accesso e la incolliamo nel terminale.Tieni presente che dopo aver copiato la password, fai clic con il pulsante destro del mouse per incollarla. Il tasto di scelta rapida della shell per incollarla su alcuni computer èshift+ins, la password incollata qui non verrà visualizzata, è normale.

Infine, premi Invio e verrà visualizzato il seguente contenuto, che indica il successo:

Inserisci qui la descrizione dell'immagine

Inserisci qui la descrizione dell'immagine

Dopo esserci connessi alla macchina di sviluppo, possiamo utilizzarehostnamePer visualizzare il nome della macchina di sviluppo, utilizzareuname -aPer visualizzare le informazioni sul kernel della macchina di sviluppo, utilizzarelsb_release -aPer visualizzare le informazioni sulla versione della macchina di sviluppo, utilizzarenvidia-smiControlla le informazioni sulla GPU Parleremo di questi comandi più tardi Se desideri uscire dalla connessione remota, inseriscile due volte.exitQuesto è tutto.

2.2.2 Configurare la chiave SSH per la connessione remota SSH

Ma quando sviluppiamo e studiamo, è problematico inserire la password ogni volta da remoto. Possiamo impostare la chiave SSH per saltare il passaggio di immissione della password nel comando sshssh-keygencomando per generare la chiave

La chiave SSH è un metodo di autenticazione di accesso sicuro e conveniente, utilizzato per l'autenticazione e la comunicazione crittografata nel protocollo SSH.

ssh-keygenSupporta chiavi di autenticazione RSA e DSA.

I parametri comunemente utilizzati includono:

  • -t: specifica il tipo di chiave, ad esempio dsa, ecdsa, ed25519, rsa.
  • -b: specifica la lunghezza della chiave.
  • -C: aggiungi commenti.
  • -f: specifica il nome del file in cui salvare la chiave.
  • -i: legge file di chiave pubblica/privata compatibili con ssh-v2 non crittografati.

Qui utilizziamo l'algoritmo RSA per generare la chiave, il comando è:

ssh-keygen -t rsa
  • 1

Dopo aver inserito il comandoEntra fino in fondoQuesto è tutto, la chiave qui viene generata per impostazione predefinita in~/.ssh/sotto la directory,~Significa la directory home, se è Windows, lo èC:Users{your_username} .Può essere utilizzato in PowerShellGet-ContentComando per visualizzare la chiave generata, utilizzabile se si tratta di un sistema operativo LinuxcatOrdine.

Inserisci qui la descrizione dell'immagine

Inserisci qui la descrizione dell'immagine

Quindi torniamo alla piattaforma della macchina di sviluppo e facciamo clic su Configurazione nella home pageChiave SSH, quindi fare clic suAggiungi la chiave pubblica SSH

Inserisci qui la descrizione dell'immagine

Inserisci qui la descrizione dell'immagine

Copia la chiave appena generata e incollala nella casella della chiave pubblica. Il nome verrà riconosciuto automaticamente. Infine, fai clic su Aggiungi ora e la configurazione della chiave SSH sarà completata.

Inserisci qui la descrizione dell'immagine

Dopo aver completato la creazione della chiave SSH, riavviareterminaleQuando ci si connette da remoto, il passaggio di immissione della password verrà saltato.

2.2.3 Utilizzare VScode per la connessione remota SSH

Naturalmente puoi anche utilizzare software di connessione remota SSH, come:Termine del vento, Xterminal Aspettare. Qui utilizziamo VScode per la connessione remota Il vantaggio di utilizzare VScode è che si tratta di un editor di codice, molto comodo per la modifica del codice e altre operazioni.

Se vogliamo connetterci in remoto in VScode, dobbiamo anche installare una serie di plug-in. Puoi cercare online come installare VScode. (Il codice vs nel computer di sviluppo non può cercare questo plug-in, ma il codice vs locale sì)

Inserisci qui la descrizione dell'immagine

Se hai installato VScode, puoi fare clic sulla pagina dell'estensione a sinistra e inserire "SSH" nella casella di ricerca. Il primo è il plug-in che vogliamo installare. Basta fare clic su "Installa".

Inserisci qui la descrizione dell'immagine

Dopo aver installato il plug-in, fare clic sull'icona della connessione remota nella barra laterale, fare clic sul pulsante "+" in SSH e aggiungere il comando di accesso per la connessione SSH del computer di sviluppo.

Inserisci qui la descrizione dell'immagine

Copiamo il comando di accesso, quindi incolliamo il comando nella finestra pop-up e infine premiamo Invio:

Inserisci qui la descrizione dell'immagine

Inserisci qui la descrizione dell'immagine

Il file di configurazione predefinito va bene. Ovviamente puoi anche personalizzarlo. Quello che segue è il contenuto specifico del file di configurazione: (Ciò include tutte le informazioni sulla connessione remota)

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

Se desideri aggiungere manualmente alcune delle seguenti opzioni di configurazione, devi modificare le parti corrispondenti in base al formato sopra.

Se *StrictHostKeyChecking noEUserKnownHostsFile* /dev/nullElimina la finestra pop-up che verrà visualizzata per la verifica dell'impronta digitale:

Inserisci qui la descrizione dell'immagine

StrictHostKeyChecking no Indica che il controllo rigoroso della chiave host è disabilitato. Ciò significa che quando ci si connette a un nuovo server SSH, la chiave host del server non verrà verificata rigorosamente, il che potrebbe comportare un certo rischio per la sicurezza.

UserKnownHostsFile /dev/nullImposta il file della chiave host noto all'utente su /dev/null, che essenzialmente ignora la registrazione e l'uso delle chiavi host conosciute.

Tuttavia, nelle pratiche di sicurezza generali, non è consigliabile disabilitare arbitrariamente il controllo rigoroso della chiave host.

Quindi fare clic su "Connetti" nella finestra di richiesta che appare nell'angolo in basso a destra per connettersi in remoto al computer di sviluppo.

Inserisci qui la descrizione dell'immagine

Inserisci qui la descrizione dell'immagine

Una volta completata la connessione remota, puoi scegliere la cartella da aprire, che può anche essere chiamata directory di lavoro. Puoi scegliere la cartella nella macchina di sviluppo o quella locale. La cartella nella macchina di sviluppo è quella menzionata in precedenza.disco nuvola

La prossima volta che effettuerai una connessione remota, non sarà necessario inserire comandi di accesso e altre informazioni. È sufficiente aprire la connessione remota di vscode per visualizzare le informazioni sulla macchina di sviluppo della prima connessione, come seguerootSignifica che quando ci colleghiamo per la prima volta alla macchina di sviluppo, utilizziamo/rootLista di lavoro.

Inserisci qui la descrizione dell'immagine

E nella foto qui sotto->Indica che è necessario selezionare nuovamente la directory di lavoro dopo essere entrati nella macchina di sviluppo:

Inserisci qui la descrizione dell'immagine

E nella foto qui sotto->Indica l'ingresso nella directory di lavoro selezionata dall'ultima macchina di sviluppo:

Inserisci qui la descrizione dell'immagine

La directory di lavoro selezionata ogni volta verrà visualizzata sotto le informazioni sulla macchina di sviluppo: (c'è una directory di lavoro aggiuntiva per il lagent qui)

Inserisci qui la descrizione dell'immagine

Successivamente introdurremo quandoMappatura dei porti

2.3. Mappatura dei porti

2.3.1 Cos'è la mappatura delle porte?

Mappatura dei porti È una tecnologia di rete in grado di mappare qualsiasi porta nella rete esterna sulla porta corrispondente nella rete interna per realizzare la comunicazione tra la rete interna e la rete esterna. Attraverso la mappatura delle porte, è possibile accedere ai servizi o alle applicazioni nell'intranet dalla rete esterna per ottenere una comunicazione conveniente attraverso la rete.

Allora perché dobbiamo eseguire la mappatura delle porte quando utilizziamo una macchina di sviluppo?

Perché nei corsi successivi condurremo modellidimostrazione_web Nella pratica di distribuzione, durante questo processo, è probabile che si verifichi il problema del caricamento incompleto dell'interfaccia utente web.Questo perché quando si esegue web_demo nell'IDE Web della macchina di sviluppo, l'accesso diretto al servizio http/https nella macchina di sviluppo potrebbe riscontrare problemi proxy.risorse dell'interfaccia utenteNon caricato completamente.

Quindi, per risolvere questo problema, dobbiamo mappare la porta della connessione che esegue web_demo eI collegamenti di rete esterni sono mappati sul nostro host locale , utilizziamo l'accesso alla connessione locale per risolvere questo problema del proxy. Facciamo pratica ora.

Inserisci qui la descrizione dell'immagine

Comprendiamo innanzitutto come funziona la mappatura delle porte della macchina di sviluppo in base a un diagramma:

Di seguito sono riportati i passaggi pratici. Per prima cosa è necessario comprendere come eseguire la mappatura delle porte.

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

Quanto sopra è un comando di mappatura delle porte. Esegui questo comando sull'host per eseguire la mappatura delle porte. Ecco un diagramma di flusso per comprendere il processo di mappatura delle porte:

Inserisci qui la descrizione dell'immagine

Il PC personale si connetterà in remoto all'unica porta esposta 37367 della macchina di sviluppo (questo viene menzionato durante SSH e la porta esposta di ciascuna macchina di sviluppo è diversa) e imposterà le opzioni del tunnel. Il porto esposto funge da stazione di transito per l'inoltro del traffico.

  • -C: attiva la compressione per ridurre la quantità di dati trasferiti.
  • -N: Non esegue comandi remoti, stabilisce solo tunnel.
  • -g: consente agli host remoti di connettersi alle porte inoltrate localmente.

Quando questo comando SSH viene eseguito su un PC personale, il client SSH resterà in ascolto sulla porta 7860 del computer locale.

Tutto il traffico inviato alla porta locale 7860 verrà inoltrato dal tunnel SSH alla porta 7860 sull'indirizzo 127.0.0.1 del server remoto.

Ciò significa che anche se questa porta della macchina di sviluppo non è direttamente esposta alla rete esterna, possiamo accedere in modo sicuro ai servizi sul server remoto attraverso questo tunnel. .

2.3.2 Come eseguire la mappatura delle porte?
2.3.2.1 Utilizzare il comando ssh per la mappatura delle porte

Andiamo ancora all'interfaccia della macchina di sviluppo, troviamo la nostra macchina di sviluppo e facciamo clicServizi personalizzati, copia il primo comando,
Inserisci qui la descrizione dell'immagine

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

Presentiamogli il significato di ciascuna parte del comando:

  • -p 37367: specifica la porta per la connessione SSH a 37367, menzionata in precedenza.
  • [email protected]: Indica da utilizzare root L'identità dell'utente si connette assh.intern-ai.org.cn questo ospite.
  • -CNg
    • -C Solitamente utilizzato per abilitare la compressione.
    • -N Indica che i comandi remoti non vengono eseguiti, ma vengono stabilite solo connessioni per il port forwarding, ecc.
    • -g Consenti agli host remoti di connettersi alle porte inoltrate localmente.
  • -L {本地机器_PORT}:127.0.0.1:{开发机_PORT}: Questo serve per impostare il port forwarding locale per inoltrare la porta specificata del computer locale (by {本地机器_PORT} rappresenta) inoltrato all'host remoto (qui ad es.ssh.intern-ai.org.cn)Di 127.0.0.1 (ovvero l'indirizzo di loopback locale) e la porta della macchina di sviluppo specificata (definita da{开发机_PORT} esprimere).
  • -o StrictHostKeyChecking=no: disattiva il controllo rigoroso della chiave host per evitare richieste o errori dovuti a chiavi host sconosciute quando ci si connette per la prima volta.

Quando esegui una demo web, puoi utilizzare questo comando per eseguire la mappatura delle porte, ad esempio:

Creiamo un file hello_world.py (fai clic con il pulsante destro del mouse sull'interfaccia della macchina di sviluppo per creare il file e modificare il nome in hello_world.py) e inseriamo il seguente contenuto nel file:

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

Ricorda dopo la modificactrl+ssalva

Prima di eseguire il codice, è necessario utilizzarepip install gradio==4.29.0Comando per installare i seguenti pacchetti di dipendenze (copiare e incollare il comando nel terminale), quindi eseguirne uno nel terminale di Web IDEpython hello_world.pyOrdine

Inserisci qui la descrizione dell'immagine

Se la mappatura delle porte non viene eseguita, non è possibile accedervi utilizzando l'IP locale.

Inserisci qui la descrizione dell'immagine

Posso inserirlo in PowerShell utilizzando il seguente comando:

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

Inserisci qui la descrizione dell'immagine

Questo rappresenta il successo. (Avviso: Questo comando non restituisce alcun contenuto, il che significa che la mappatura delle porte è in esecuzione e quindi è possibile visualizzare l'interfaccia utente Web aprendo la connessione nella pagina Web)

Inserisci qui la descrizione dell'immagine

2.3.2.2 Utilizzare vscode per la mappatura delle porte

Naturalmente, se eseguiamo diverse interfacce utente web, dobbiamo inserire ripetutamente i comandi, il che è molto problematico, e dobbiamo utilizzare VScode.Abbiamo connesso la macchina di sviluppo in remoto tramite SSH. VScode fornisce la mappatura automatica delle porte. Non è necessario configurarlo manualmente. Possiamo utilizzare il tasto di scelta rapida "Ctrl+Shift+~".Riattiva il terminale, le opzioni della porta si trovano sul lato destro del terminale:

Inserisci qui la descrizione dell'immagine

Qui è possibile visualizzare le informazioni sulla mappatura della porta. Se è necessario modificare la porta, è possibile modificare il numero di porta nella colonna della porta.

3. Comandi Linux di base

In questa parte ti porterò a comprendere un po' di LinuxOperazioni di base e utilizzare alcuni strumenti. In modo che ognuno possa risolverlo da solo quando incontra problemi. Se riscontri problemi, puoi anche commentare qui e ti risponderò in tempo.

perché usiamoMacchina di sviluppoutilizzato raramentegestione dell'autorità , quindi non lo presenteremo. (Le seguenti operazioni vengono tutte eseguite nel terminale VScode)

3.1 Gestione dei file

In Linux, le operazioni comuni di gestione dei file includono:

  • Crea un file:poter usare touch il comando crea un file vuoto.
  • Crea una directory:utilizzo mkdir Ordine.
  • Cambio di directory:utilizzocdOrdine.
  • Mostra rubrica:utilizzopwdOrdine.
  • Visualizza il contenuto del file: Se utilizzato cat Visualizza direttamente l'intero contenuto del file,more Eless Visualizzabile in pagine.
  • Modifica file:Piace vi Ovim Aspetta l'editore.
  • Copia file:utilizzo cp Ordine.
  • Crea collegamento al file:utilizzolnOrdine.
  • Sposta file:passaggio mv Ordine.
  • Cancella file:utilizzo rm Ordine.
  • eliminare la directoryrmdir(È possibile eliminare solo le directory vuote) oppure rm -r(Le directory non vuote possono essere cancellate).
  • Trova file:Poter usare find Ordine.
  • Visualizza i dettagli di un file o di una directory:utilizzolscomando, come l'utilizzo ls -lVisualizza informazioni dettagliate sui file in una directory.
  • Elaborare file: Per operazioni su file complesse, è possibile utilizzaresedOrdine.

Ecco alcuni comandi che utilizzeremo nel corso:

3.1.1 tocco

Possiamo usare il tocco per creare rapidamente file, quindi non dobbiamo fare clic manualmente per crearli.Ad esempio, vogliamo creare un filedemo.pydocumento:

3.1.2 mkdir

Allo stesso modo, se vuoi creare un file denominatotestRubrica:

Inserisci qui la descrizione dell'immagine

3.1.3 CD

Questo comando sarà il comando più comunemente utilizzato Prima di utilizzarlo, è necessario spiegare la struttura della directory agli studenti che non hanno competenze informatiche e disegnare un'immagine comprensibile a tutti:

Inserisci qui la descrizione dell'immagine

Quello che stiamo usando ora èrootdirectory, che è anche la directory home dell'utente root.~, nel sistema operativo Linux/Rappresenta la directory root. Nella directory root esistono molte directory e file richiestirootdirectory, tra cui.Rappresenta la directory corrente,.. La directory principale rappresentata.Se dovessi entrare adessotestdirectory e poi tornare arootDirectory, possiamo fare questo:

3.1.4 persona con disabilità

possiamo usarepwdComando per visualizzare la directory corrente: questo ci rende più facile determinare in quale directory ci troviamo attualmente.

Inserisci qui la descrizione dell'immagine

3.1.5 gatto

catIl comando può visualizzare il contenuto del file ed è possibile utilizzare più comandi--helpComando per visualizzare:

  • -a, --show-all è equivalente a -vET
  • -b, –number-non vuoto numero di righe di output non vuote, sovrascrive -n
  • -e, equivalente a -vE
  • -E, --show -end visualizza $ alla fine di ogni riga
  • -n, --number numera tutte le righe di output
  • -s, --crick-blank sopprime le righe di output vuote ripetute
  • -t è equivalente a -vT
  • -t, --show-tabs visualizza i caratteri di tabulazione come ^I
  • -v, --show utilizza la notazione ^ e M non stampabile, eccetto LFD e TAB
3.1.6 vi o vim

Possiamo usarlo quando dobbiamo modificare i fileviOvimcomando, quando si accede alla modifica del file, sono disponibili tre modalità:

Inserisci qui la descrizione dell'immagine

Accedere alla modalità di modifica da utilizzarei, la comodità di vim è che puoi apportare semplici modifiche ai file nel terminale.

3.1.7 cp e ln (enfasi)

**cp**Il comando verrà utilizzato frequentemente nei seguenti corsi. Viene utilizzato per copiare un file o una directory in un'altra directory. Gli usi comuni includono:

  • Copia file:cp 源文件 目标文件
  • Copia directory:cp -r 源目录 目标目录

Ma se vogliamo utilizzare il modello, questa operazione occuperà molto spazio su disco, quindi generalmente utilizziamoln comando, è uguale al collegamento di Windows. Esistono due tipi di collegamenti in Linux:collegamento difficile(collegamento fisico) concollegamento morbido (collegamento simbolico), un collegamento fisico significa che un file può avere più nomi, mentre un collegamento software genera un file speciale il cui contenuto punta alla posizione di un altro file. I collegamenti reali esistono nello stesso file system, ma i collegamenti software possono estendersi su file system diversi.

Pertanto, generalmente utilizziamo connessioni soft. I suoi metodi di utilizzo comuni sono i seguenti:

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

I parametri sono i seguenti:

  • -s: anche la creazione di collegamenti software (collegamenti simbolici) è quella più comunemente utilizzata;
  • -f: forza l'esecuzione, sovrascrive i file di destinazione esistenti;
  • -i: modalità interattiva, se il file esiste, all'utente verrà chiesto se sovrascriverlo;
  • -n: tratta i collegamenti simbolici come directory generali;
  • -v: visualizza l'elaborazione dettagliata.
3.1.8 mv e rm

mvcomando ermI comandi vengono utilizzati in modo simile, mamvViene utilizzato per spostare file o directory e può anche essere rinominato.rmIl comando viene utilizzato per eliminare file o directory.

I metodi comunemente utilizzati sono i seguenti:

  • comando mv

Parametri comunemente usati:

  • -i: Modalità interattiva, chiedi prima di sovrascrivere.
  • -f: Copertura forzata.
  • -u: sposta solo se il file di origine è più recente del file di destinazione.

Esempio di utilizzo:

  • mv file1.txt dir1/: sposta il file file1.txt Sposta nella directorydir1 mezzo.

  • mv file1.txt file2.txt: sposta il file file1.txt Rinomina infile2.txt

  • comando rm

Parametri comunemente usati:

  • -i: Modalità interattiva, chiedi prima di eliminare.
  • -f: Cancellazione forzata, ignorando i file inesistenti, senza chiedere conferma.
  • -r:Elimina ricorsivamente una directory e il suo contenuto.

Esempio di utilizzo:

  • rm file.txt:Cancella file file.txt
  • rm -r dir1/: Elimina ricorsivamente le directory dir1 e tutto il suo contenuto.

È possibile utilizzare anche il comando per eliminare una directoryrmdir

3.1.9 Trovare

findIl comando è un potente strumento di ricerca di file nel sistema Linux Può trovare file o directory che soddisfano le condizioni nella directory specificata e nelle sue sottodirectory ed eseguire le operazioni corrispondenti.

Quello che segue èfindAlcuni usi comuni del comando:

  1. Trova per nome file:utilizzo-name opzione per trovare file per nome file. Per esempio,find /path/to/directory -name "file.txt"cercherà nella directory specificata e nelle sue sottodirectory denominatefile.txtdocumento.
  2. Trova per tipo di file:utilizzo-type opzione per trovare file per tipo di file. Per esempio,find /path/to/directory -type fVerranno trovati tutti i file ordinari nella directory specificata e nelle sue sottodirectory.
  3. Trova per dimensione del file:utilizzo-size opzione per trovare file in base alla dimensione del file. Per esempio,find /path/to/directory -size +100MTroverà i file più grandi di 100 MB nella directory specificata e nelle sue sottodirectory.
  4. Cerca per ora di modifica:utilizzo-mtime-atimeO-ctime Le opzioni trovano i file in base all'ora di modifica, all'ora di accesso o all'ora di modifica dello stato. Per esempio,find /path/to/directory -mtime -7Troverà i file nella directory specificata e nelle sue sottodirectory che sono state modificate entro 7 giorni.
  5. Trova per autorizzazioni file:utilizzo-perm opzione per trovare file in base ai permessi dei file. Per esempio,find /path/to/directory -perm 755Troverà i file con permesso 755 nella directory specificata e nelle sue sottodirectory.
  6. Trova per utente o gruppo:utilizzo-userO-group Le opzioni trovano i file in base al proprietario o al gruppo. Per esempio,find /path/to/directory -user usernameEffettuerà la ricerca nella directory specificata e nelle relative sottodirectory appartenenti all'utenteusernamedocumento.
  7. eseguire le operazioni:utilizzo-exec Le opzioni possono eseguire operazioni corrispondenti sui file trovati. Per esempio,find /path/to/directory -name "*.txt" -exec rm {} ;eliminerà tutti i risultati trovati che terminano con.txtfile alla fine.
3.1.10 ls

lsIl comando può essere utilizzato anche per elencare il contenuto di una directorydettagli

I parametri e i metodi di utilizzo comunemente utilizzati sono i seguenti:

  • -a: Visualizza tutti i file e le directory, inclusi i file nascosti (oltre.file o directory che inizia con .).
  • -l: Visualizza informazioni dettagliate in formato lungo, inclusi permessi dei file, proprietario, dimensione, ora di modifica, ecc.
  • -h:E-lUtilizzati in combinazione per visualizzare la dimensione del file in modo leggibile dall'uomo (ad es.KMGAspettare).
  • -R: elenca ricorsivamente il contenuto delle sottodirectory.
  • -t : Visualizza in ordine di tempo di modifica del file. ,

Inserisci qui la descrizione dell'immagine

3.1.11 seduto

sedCommand è un editor di flussi, utilizzato principalmente per l'elaborazione di testi. Viene spesso utilizzato durante l'elaborazione di operazioni su file complesse. Verrà utilizzato nei corsi successivi.sedI parametri comunemente utilizzati e gli esempi di utilizzo dei comandi sono i seguenti:

  • Descrizione dei parametri:
    • -e<script> O--expression=<script>: specifica gli script direttamente nella riga di comando per l'elaborazione del testo.
    • -f<script文件> O--file=<script文件>: legge lo script dal file script specificato per l'elaborazione del testo.
    • -n O--quiet O--silent: stampa solo i risultati di output elaborati dallo script e non stampa le righe senza corrispondenza.
  • Descrizione dell'azione:
    • a: aggiunge la stringa di testo specificata alla riga successiva della riga corrente.
    • c: sostituisce l'intervallo di righe specificato con la stringa di testo specificata.
    • d: elimina la riga specificata.
    • i: aggiunge la stringa di testo specificata alla riga precedente della riga corrente.
    • p : stampa le righe selezionate.solitamente con-n Utilizzato insieme ai parametri, vengono stampate solo le righe corrispondenti.
    • s : utilizza le espressioni regolari per la sostituzione del testo. Per esempio,s/old/new/g Sostituisci tutti gli "InternLM" con "InternLM yyds".
  • Esempio:

Inserisci qui la descrizione dell'immagine

utilizzato nell'esempioechocomando, è lo stesso di PythonprintLo stesso, usato per stampare il contenuto, qui usa il carattere pipe>Stampa InternLM in un file file I caratteri pipe comunemente utilizzati includono<E|, ad esempio possiamo usaregrepComando per visualizzare gli include installati in PythonosPacchetto sul campo:

Inserisci qui la descrizione dell'immagine

grep È un potente strumento di ricerca testuale. I parametri comunemente utilizzati sono i seguenti:

  • -i: Cerca indipendentemente dal caso.
  • -v: Inverte la corrispondenza, ovvero visualizza le linee non corrispondenti.
  • -n: Visualizza il numero di riga.
  • -c: conta il numero di righe corrispondenti.

3.2 Gestione dei processi

Gestione dei processiI comandi sono strumenti importanti per il monitoraggio del sistema e la gestione dei processi I comandi di gestione dei processi comunemente utilizzati includono quanto segue:

  • ps: Visualizza i processi in esecuzione
  • superiore:Visualizzazione dinamica dei processi in esecuzione
  • albero ps: Visualizza i processi in esecuzione nella visualizzazione ad albero
  • grep: utilizzato per trovare processi
  • Carino:Cambia la priorità di un processo
  • lavori: Visualizza le informazioni relative al processo
  • bg e fg: sposta il processo in background
  • uccisione: termina il processo

C'è anche un comando speciale nella macchina di svilupponvidia-smi , che è uno strumento da riga di comando per NVIDIA System Management Interface, utilizzato per monitorare e gestire i dispositivi GPU NVIDIA. Fornisce un modo rapido per visualizzare informazioni quali stato della GPU, utilizzo, temperatura, utilizzo della memoria, consumo energetico e processi in esecuzione sulla GPU.

Di seguito sono riportati esempi di utilizzo di ciascun comando:

  • ps : elenca i processi nel sistema attuale. È possibile visualizzare diverse informazioni sul processo utilizzando diverse opzioni, come ad esempio:
    • ps aux  # 显示系统所有进程的详细信息
      
      • 1
  • top : Visualizza dinamicamente lo stato dei processi nel sistema. Aggiorna l'elenco dei processi in tempo reale, mostrando i processi con il massimo utilizzo di CPU e memoria.
    • top  # 启动top命令,动态显示进程信息
      
      • 1
  • pstree: Visualizza i processi attualmente in esecuzione e le relative relazioni genitore-figlio sotto forma di diagramma ad albero.
    • pstree  # 显示进程树
      
      • 1
  • pgrep : Trova i processi che corrispondono ai criteri. È possibile cercare processi in base al nome del processo, all'utente e ad altre condizioni.
    • pgrep -u username  # 查找特定用户的所有进程
      
      • 1
  • nice: modifica la priorità di un processo.nice Più basso è il valore, maggiore è la priorità del processo.
    • nice -n 10 long-running-command  # 以较低优先级运行一个长时间运行的命令
      
      • 1
  • jobs: Visualizza un elenco di processi nella sessione terminale corrente, inclusi i processi in esecuzione in background.
    • jobs  # 列出当前会话的后台作业
      
      • 1
  • bg Efgbg Metti il ​​processo sospeso in esecuzione in background,fg Riporta in primo piano il processo in background.
    • bg  # 将最近一个挂起的作业放到后台运行
      fg  # 将后台作业调到前台运行
      
      • 1
      • 2
  • kill: invia un segnale al processo specificato, solitamente utilizzato per terminare il processo.
    • kill PID  # 杀死指定的进程ID
      
      • 1
    • Avviso,kill Il comando viene inviato per impostazione predefinitaSIGTERM Segnale, che può essere utilizzato se il processo non risponde-9utilizzoSIGKILL Il segnale uccide forzatamente il processo:

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

SIGTERM Il segnale (Terminazione del segnale) è un segnale standard utilizzato nei sistemi operativi Unix e simili per richiedere la terminazione del processo. Questo segnale viene solitamente inviato quando il sistema o l'utente desidera arrestare normalmente un processo.ESIGKILLI segnali sono diversiSIGTERM I segnali possono essere catturati e gestiti da un processo, consentendo al processo di ripulirsi prima di uscire. (da Internet)

Quello che segue è nvidia-smi Alcuni utilizzi di base dei comandi:

  • Visualizza informazioni di riepilogo sullo stato della GPU:
    • nvidia-smi
      
      • 1
  • Visualizza informazioni dettagliate sullo stato della GPU:
    • nvidia-smi -l 1
      
      • 1
    • Questo comando aggiornerà le informazioni sullo stato ogni 1 secondo.

  • Visualizza la cronologia di utilizzo della GPU:
    • nvidia-smi -h
      
      • 1
  • Elenca tutte le GPU e visualizza i relativi PID e nomi di processo:
    • nvidia-smi pmon
      
      • 1
  • Termina forzatamente il processo GPU specificato:
    • nvidia-smi --id=0 --ex_pid=12345
      
      • 1
    • Ciò terminerà forzatamente il processo con PID 12345 su GPU ID 0.

  • Imposta la modalità prestazioni GPU:
    • nvidia-smi -pm 1
      nvidia-smi -i 0 -pm 1
      
      • 1
      • 2
    • Il primo comando imposterà tutte le GPU in modalità prestazioni, il secondo comando avrà come target solo la GPU con ID 0.

  • Riavvia la GPU:
    • nvidia-smi --id=0 -r
      
      • 1
    • Ciò riavvierà la GPU con ID 0.

  • Mostra informazioni di aiuto:
    • nvidia-smi -h
      
      • 1

Quella che segue è un'introduzione alle informazioni sulla GPU attraverso un'immagine:

Inserisci qui la descrizione dell'immagine

3.3 Utilizzo dello strumento

Ecco uno strumentoTMUXTMUX è un multiplexer terminale. Semplifica il passaggio tra più terminali, scollegarli (questo non uccide i terminali, continuano a funzionare in background) e ricollegarli ad altri terminali. Perchè introdurre questo strumento?Perché lo faremo più tardiXtunerQuando si mette a punto il modello, ci vorrà molto tempoTmuxPuò risolvere la situazione in cui il programma viene terminato e interrotto. Ecco come installarlo e utilizzarlo.

Poiché la macchina di sviluppo utilizza il sistema operativo Ubuntu, è possibile utilizzarelsb_release -a Comando per visualizzare le informazioni sul sistema Ubuntu:

Inserisci qui la descrizione dell'immagine

e poi utilizzareapt install tmuxComando per installare tmux È possibile utilizzarlo al termine dell'installazione.tmuxPuoi usare tmux con il comando Se vuoi uscire da tmux, puoi usare ".Ctrl+d"tasto di scelta rapida.

Sul computer di sviluppo, solo i file nel percorso /root vengono archiviati in modo permanente. Il software installato in altri percorsi verrà ripristinato dopo il riavvio.

I metodi di utilizzo specifici possono essere visualizzati su:

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

4. Introduzione a Conda e Shell (aggiuntivo)

Conda è un sistema di gestione dei pacchetti e di gestione dell'ambiente open source che funziona su Windows, macOS e Linux. Installa, esegue e aggiorna rapidamente i pacchetti software e le relative dipendenze. Usando Conda puoi facilmente creare, salvare, caricare e cambiare diversi ambienti sul tuo computer locale.

Già installato sulla macchina di sviluppoconda, possiamo usarlo direttamente e ce n'è anche uno integrato nel computer di sviluppocondaOrdinestudio-conda, presenteremo di seguitocondaUtilizzo di base di estudio-condaCome utilizzare e introdurrestudio-condaCome viene raggiunto.

Lo presenteremo nelle seguenti parti:

  1. impostazioni della conda
  2. gestione dell'ambiente conda
  3. conda e pip
  4. Studio-conda viene utilizzato con Shell (estensione)

4.1 impostazioni conda

possiamo usareconda --versionper visualizzare la macchina di sviluppo correntecondainformazioni sulla versione:

Inserisci qui la descrizione dell'immagine

quando vogliamo utilizzarecondaL'installazione del pacchetto sarà molto lenta. Possiamo impostare il mirroring domestico per migliorare la velocità di installazione. L'esempio è il seguente:

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

Ma di solito usiamopipInstallando il pacchetto, lo presenteremo in seguitopipEcondadifferenza.

Se vogliamo visualizzare le informazioni di configurazione di conda, possiamo usareconda config --showcomando, se è l'impostazione predefinita della macchina di sviluppo, restituirà: (parte delle informazioni)

Inserisci qui la descrizione dell'immagine

Queste configurazioni sono presentiCondaLa configurazione dell'ambiente influenzerà i metodi e i risultati dell'installazione del pacchetto software, degli aggiornamenti, della gestione dell'ambiente e di altre operazioni.

4.2 gestione dell'ambiente conda

Questa parte lo èconda中非常重要的一部分,掌握了这一部分大家就可以将开发环境玩转到飞起了😀。

4.2.1 Creare un ambiente virtuale

possiamo usareconda create -n name python``=3.10 Crea un ambiente virtuale, il che significa che viene creato un ambiente virtuale con versione Python 3.10 e nome.Dopo la creazione, puoi.condasotto la directoryenvsTrovato nella directory.

Inserisci qui la descrizione dell'immagine

Quando la versione di Python non è specificata, verrà creato automaticamente un ambiente virtuale basato sull'ultima versione di Python. Allo stesso tempo, possiamo installare i pacchetti necessari durante la creazione dell'ambiente virtuale:conda create -n name numpy matplotlib python=3.10(Ma non ti consiglio di usarlo in questo modo)

I parametri comuni per la creazione di un ambiente virtuale sono i seguenti:

  • -n o --name: specifica il nome dell'ambiente da creare.
  • -c o --channel: specifica i canali aggiuntivi del pacchetto.
  • –clone: ​​clona un ambiente esistente per creare un nuovo ambiente.
  • -p o --prefix: specifica il percorso di installazione dell'ambiente (percorso non predefinito).
4.2.2 Controllare quali ambienti virtuali esistono

Se vogliamo vedere quali ambienti virtuali abbiamo, possiamo usare il seguente comando:

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

Inserisci qui la descrizione dell'immagine

Allo stesso tempo, possiamo anche vedere la directory in cui si trova l'ambiente.

4.2.3 Attivazione e uscita dall'ambiente virtuale

Dopo aver creato l'ambiente virtuale che possiamo utilizzareconda activate name comando per attivare l'ambiente virtuale, come verificare se il passaggio ha avuto esito positivo?È facile, basta guardare(base)Se diventa il nome dell'ambiente virtuale creato.

Inserisci qui la descrizione dell'immagine

Se vuoi uscire dall'ambiente virtuale, puoi usare:

conda activate
conda deactivate
  • 1
  • 2

Entrambi i comandi tornerannobaseambiente perchébaseÈ l'ambiente base di conda. Se osservi attentamente,baseLa directory dell'ambiente è di livello superiore rispetto ad altre directory dell'ambiente virtuale.

4.2.4 Eliminare ed esportare l'ambiente virtuale

Se desideri eliminare un ambiente virtuale, puoi utilizzareconda remove --name name --all, se elimini solo uno o alcuni pacchetti nell'ambiente virtuale, puoi utilizzareconda remove --name name package_name

L'esportazione di un ambiente virtuale è molto necessaria per un ambiente specifico, poiché le dipendenze di alcuni pacchetti software sono molto complesse e sarà problematico ricrearlo e configurarlo da soli. Se esportiamo l'ambiente configurato, potremo ripristinarlo la prossima volta. e puoi anche condividere la configurazione con altri.

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

Per esempio lo faremoxtuner0.1.17L'ambiente virtuale viene esportato e le informazioni di configurazione sono le seguenti:

Inserisci qui la descrizione dell'immagine

Questi includononome dell'ambienteIl percorso del repository online per i pacchetti dell'ambiente virtualeEDipendenze dell'ambiente virtuale . Successivamente utilizzeremo metodi di utilizzo avanzati per ripristinare rapidamente l'ambiente virtuale.

4.3 conda e pip

In questa parte ne presentiamo alcunicondaEpipAlcune differenze:

  1. conda può gestire pacchetti non Python e pip può gestire solo pacchetti Python.
  2. conda può essere utilizzato per creare un ambiente virtuale, ma pip non può e deve fare affidamento su pacchetti come virtualenv.
  3. Il pacchetto installato da conda viene compilatofile binario, i pacchetti dipendenti verranno installati automaticamente durante l'installazione dei file del pacchetto;ruota o codice sorgente, le dipendenze diverse dal linguaggio Python non saranno supportate durante il processo di installazione.
  4. I pacchetti installati da conda verranno scaricati nella directory corrispondente all'ambiente virtuale corrente e potranno essere scaricati una volta e installati più volte. pip viene scaricato direttamente nell'ambiente corrispondente.

Ruota È un formato del pacchetto di installazione di Python.

È un formato di distribuzione binario precompilato, simile ai binari compilati in conda.

I principali vantaggi del formato Ruota includono:

  1. Installazione rapida: poiché è stato precompilato, non è necessario eseguire il processo di compilazione come l'installazione del codice sorgente durante l'installazione, risparmiando tempo.
  2. Coerenza: garantisce che i risultati dell'installazione siano coerenti tra diversi sistemi e ambienti.

Ad esempio, se desideri installare una libreria Python di grandi dimensioni, l'utilizzo del formato Wheel può evitare problemi di installazione causati dalle differenze negli ambienti di compilazione su macchine diverse. Inoltre, per quei sistemi che non dispongono di un ambiente di compilazione o hanno capacità di compilazione deboli, il formato Wheel può rendere il processo di installazione più agevole.

4.4 Utilizzo di Studio-conda e Shell (estensione)

Questa parte è una parte estesa, perché penso che sia molto interessante e molto pratica, quindi se sei interessato, puoi impararla.

Innanzitutto presentiamostudio-conda , che è un comando integrato nel computer di sviluppo e viene implementato tramite uno script Shell. Cos'è uno script Shell?

Scritta della shell Un file di testo contenente una serie di comandi disposti in un ordine specifico per automatizzare le attività in un ambiente Unix/Linux o un sistema operativo simile.

Gli script di Shell sono solitamente scritti nel linguaggio Shell. I linguaggi Shell comuni come Bash, Sh, ecc. sono i comandi Linux di base che abbiamo introdotto in precedenza, che appartengono al linguaggio Shell.

Ha le seguenti importanti caratteristiche:

  1. automazione : È possibile scrivere una serie di operazioni ripetitive e complesse come script e quindi eseguire semplicemente lo script per automatizzare queste operazioni, risparmiando tempo e riducendo gli errori. Ad esempio, uno script che esegue regolarmente il backup di file importanti ogni giorno.
  2. Gestione del sistema : Utilizzato per gestire la configurazione del sistema, le autorizzazioni dell'utente, il controllo del processo, ecc. Ad esempio, uno script che crea un nuovo utente e ne imposta le autorizzazioni.
  3. Elaborazione in lotti : Possibilità di elaborare più file o dati contemporaneamente. Ad esempio, uno script che converte un batch di file di immagine da un formato a un altro.
  4. controllo di processo: Come il giudizio condizionale (if-else), il ciclo (for, while), ecc., che consente agli script di eseguire operazioni diverse a seconda delle diverse situazioni.

Quellostudio-condaFa parte dell'automazione. Il file di configurazione dell'ambiente bash dell'utente root nella nostra macchina di sviluppo è.bashrc, ma in realtà il file di configurazione principale è/share/.aide/config/bashrc, in questo file sono scritti alcuni comandi che ci permettono di eseguire alcune operazioni più velocemente, come ad esempio:

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

exportviene utilizzato per impostare le variabili di ambiente.aliasè copiare un file sh in una variabile. Questo può essere eseguito nel terminale come comando Ourstudio-condaQuesto è tutto.

Quistudio-smiViene utilizzato per verificare l'utilizzo della memoria virtuale all'apertura/share/studio-smiIl file può essere visto:

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

Questo script viene utilizzato per verificare se esiste un file vgpu-smi il comando, se presente, verrà eseguitovgpu-smi per visualizzare le informazioni sullo stato di una GPU virtuale (vGPU); se non presente, verrà eseguitanvidia-smi per visualizzare le informazioni sullo stato della GPU NVIDIA. Come mostrato di seguito:

Inserisci qui la descrizione dell'immagine

nvidia-smi è uno strumento per il monitoraggio e la gestione dei dispositivi fisici GPU NVIDIA evgpu-smi Progettato per monitorare e gestire le risorse GPU virtualizzate tramite la tecnologia NVIDIA vGPU.

vediamo/share/install_conda_env.shIl contenuto del file è il seguente:

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

uno di loro*list*()Aspetta, è tuttostudio-condafunzione, che può implementare determinate operazioni, ad esempio, possiamo usarestudio-conda env listPer visualizzare l'ambiente predefinito:

Inserisci qui la descrizione dell'immagine

In*clone*()La funzione principale della funzione è copiare l'ambiente, ma può essere copiato solo dall'ambiente predefinito. Il codice principale è in realtà:

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

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

Decomprimere il pacchetto compresso dell'ambiente preimpostato e quindi creare un ambiente virtuale tramite clone. Tuttavia, una certa logica è impostata anche nello script Shell, ma è solo un giudizio. Se hai familiarità con qualsiasi linguaggio di programmazione, dovresti essere in grado capirlo. Anche se non riesci a capirlo, non è un grosso problema.

Allora come possiamo aggiungere il nostro ambiente creato astudio-condaE il centro?

Il primo passaggio è creare un nuovo ambiente conda in /share/conda_envs

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

Il secondo passaggio è copiare i file in /root/.conda/pkgs sul computer locale in /share/pkgs, ricomprimerli e sostituirli (questo passaggio consiste nell'archiviare i pacchetti pubblici di grandi dimensioni durante il processo di creazione di conda per evitare download ripetuti)

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

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

Il terzo passaggio consiste nell'aggiornare la funzione elenco in install_conda_env.sh e aggiungere la nuova descrizione dell'ambiente conda.

Quanto sopra è il metodo fornito dalla macchina di sviluppo per impostazione predefinita. In effetti, esiste un altro metodo, che abbiamo utilizzato in precedenzacondaEsportatoxtuner0.1.17File di configurazione per ambienti virtuali, possiamo usareconda env create -f xtuner0.1.17.yml comando per ripristinare l'ambiente virtuale.Scriviamo un semplice script di Shell per implementare questa operazione: Creiamotest.shfile, scrivere il seguente contenuto:

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

Dopo aver completato la creazione dello script Shell, dobbiamo concedere le autorizzazioni allo script. Puoi utilizzare il comando:chmod +x test.sh , quindi inserisci./test.sh restore xtuner0.1.17E premi Invio per ripristinare l'ambiente virtuale.

Inserisci qui la descrizione dell'immagine

Tuttavia, questo non è molto diverso dall'uso diretto. Se questa operazione viene confrontata con l'operazione nella macchina di sviluppo,studio-conda Combinare i comandi sarà molto comodo, ma i metodi per copiare l'ambiente sono diversi.Pertanto, se vuoi implementarlo, devi farlo/share/install_conda_env.shLa logica del file viene modificata.

Ok, questo è tutto il contenuto di questo livello. Spero che il contenuto di cui sopra possa essere utile a tutti in futuro. Se vuoi saperne di più su Linux, puoi leggere l'articolo del mio blog Anche se non so come usare Linux , ci sarà utile imparare. I modelli di grandi dimensioni non hanno molto impatto, ma se impari bene Linux, renderà il tuo apprendimento dei modelli di grandi dimensioni molto agevole. Infine, non dimenticare di completare i livelli che abbiamo impostato in precedenza!

Collegamento al blog:Linuxe

problema comune

1. L'ambiente della macchina di sviluppo InternStudio è danneggiato. Come inizializzare l'ambiente della macchina di sviluppo?

Esegui con attenzione! ! ! !Tutti i dati andranno persi. Questa operazione è disponibile solo sulla piattaforma InternStudio.

  • Il primo passo è connettere il terminale locale alla macchina di sviluppo tramite ssh (deve essere connesso tramite ssh per funzionare, non sul web!!!)
  • Esecuzione del secondo passaggio rm -rf /root, ci vorranno circa 10 minuti di attesa
  • Il terzo passaggio consiste nel riavviare la macchina di sviluppo. Il sistema ripristinerà il file di configurazione nel percorso /root.
  • il quarto passo ln -s /share /root/share

Missione di livello

Per superare la missione di livello, devi acquisire screenshot nei passaggi chiave:

dettagli della missioneTempo necessario per il completamento
MissioneCompleta la connessione SSH e la mappatura delle porte ed eseguihello_world.py10 minuti
Compito facoltativo 1Completa i comandi Linux di base sul computer di sviluppo10 minuti
Compito facoltativo 2Utilizza VSCODE per connetterti in remoto al computer di sviluppo e creare un ambiente conda10 minuti
Compito facoltativo 3Crea ed eseguitest.shdocumento10 minuti