Compartir tecnología

Nivel 1: Conocimientos básicos de Linux

2024-07-12

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

Prefacio

Este artículo son las notas del tercer campamento de práctica modelo a gran escala para académicos organizado por el Laboratorio de Inteligencia Artificial de Shanghai y sirve únicamente como referencia para individuos y asistentes docentes al corregir la tarea.Enlace original del tutorial.
Para registrarse, busque "El tercer campo de práctica del modelo académico" en WeChat.
Esta nota es una nota anotada personalmente y modificada según el tutorial original.

Linux+InternNivel de estudio

😀Hello大家好,欢迎来到Modelo grande eruditoCampamento práctico, aquí hay un curso básico preparado por el campamento práctico para estudiantes que participan en el campamento práctico por primera vez y estudiantes de diversas industrias que no tienen conocimientos básicos de Linux. Aquí te enseñaremos cómo usarlo.Máquina de desarrollo InternStudioy dominar algunos conceptos básicosconocimiento de linux , para que todos no tengan idea de por dónde empezar en los siguientes cursos, espero que sea de ayuda para todos. Hemos preparado algunas tareas de nivel para usted en las tareas de nivel aquí. Cuando complete las tareas de nivel requeridas y se registre, recibirá la recompensa de potencia informática del nivel actual.¡Empecemos!

1. Introducción a la máquina de desarrollo InternStudio

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

Si quieres saber más sobre InternStudio, puedes consultar los siguientes documentos: Pasantía en estudio

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

Primero abra el enlace de arriba para ingresar a InternStudio. Después de iniciar sesión, saltará automáticamente a la interfaz de la consola, como se muestra en la siguiente figura:

Insertar descripción de la imagen aquí

Déjame decirte las funciones de las páginas correspondientes a cada número de serie:

  1. Aquí puedes crearmaquina de desarrollo, así como modificar la configuración de la máquina de desarrollo y ver registros relacionados, etc.

Insertar descripción de la imagen aquí

  1. bien aquíVisualización Vea los archivos y carpetas en la máquina de desarrollo. Si crea dos máquinas de desarrollo, usarán el mismo disco en la nube. (Debido a que cada máquina de desarrollo es un contenedor Docker, se monta un disco de almacenamiento en la nube. Para obtener explicaciones de términos profesionales, consulte: Explicación de términos profesionales.) Aquí puede cargar archivos o carpetas, crear archivos y ver archivos ocultos.

Insertar descripción de la imagen aquí

  1. Esta es una nueva función de la máquina de desarrollo. Si desea realizar un proyecto, puede solicitar recursos al asistente. La función del equipo es para todos los miembros.Recursos informáticos compartidos,避免造成资源浪费。(毕竟烧的可都是💴啊)
  2. Esto se utiliza para configurarclave SSH, hablaremos sobre cómo usarlo más adelante.
  3. El último lugar es para editar su información personal y verificar suRecursos informáticosuso específico.

Lo anterior es una breve introducción a la plataforma InternStudio. Veamos cómo crear una máquina de desarrollo. Vayamos a la página de inicio y hagamos clic en ".Crear una máquina de desarrollo

Insertar descripción de la imagen aquí

Aquí elegimos crearmáquina de desarrollo personal, llamadopruebaCudaLa versión es 12.2,Asignación de recursosSeleccione 10% y la duración predeterminada estará bien.

Una vez completada la creación, enmaquina de desarrolloPuede ver la máquina de desarrollo que acaba de crear en la interfaz. Haga clic para ingresar a la máquina de desarrollo.

Insertar descripción de la imagen aquí

Después de ingresar a la máquina de desarrollo, podrá ver la página principal de la máquina de desarrollo. La máquina de desarrollo tiene tres modos para elegir:JupyterLab, Terminal y VScode

Insertar descripción de la imagen aquí

en:

  1. Laboratorio Jupyter: Un entorno interactivo de programación y enseñanza con un terminal incorporado que puede ver archivos, ejecutar código, etc. fácilmente.
  2. Terminal(Terminal, el más liviano): Se utiliza principalmente para operaciones de línea de comandos o para ejecutar scripts y programas simples.
  3. VSCódigo: El VSCode integrado en la página web también se puede desarrollar de forma remota a través de una conexión SSH en el VSCode local. A continuación se explicará cómo configurar la conexión remota.

Insertar descripción de la imagen aquí

  1. Este es el uso de recursos, que se utilizará en cursos posteriores.

2. SSH y mapeo de puertos

Presentamos arribaPlataforma InternStudioy cómo crear una máquina de desarrollo. En esta sección, queremos entender qué.SSH¿Por qué utilizar la conexión remota?, Cómo utilizar SSHconección remotaMáquina de desarrollo, ¿qué es?La asignación de puertosy como procederLa asignación de puertos

2.1 ¿Qué es SSH?

SSHEl nombre completo es Secure Shell, que se traduce al chino como shell seguro.protocolo de seguridad de red , realice acceso seguro y transferencia de archivos y otros servicios a través de mecanismos de cifrado y autenticación. El protocolo SSH proporciona servicios de red seguros en un entorno de red inseguro mediante el cifrado y la autenticación de datos de la red.

SSH es (arquitectura C/S) porservidoryclientePara establecer un canal SSH seguro, ambas partes deben establecer primero una conexión TCP, luego negociar el número de versión y varios algoritmos utilizados, y generar el mismo.clave de sesión utilizado para el cifrado simétrico posterior. Después de completar la autenticación del usuario, ambas partes pueden establecer una sesión para el intercambio de datos.

Luego, en la práctica posterior,Configurar claves SSH, la clave de configuración es para que no tengamos que ingresar la contraseña repetidamente cuando nos conectamos a la máquina de desarrollo de forma remota, luego¿Por qué conectarse de forma remota?

La ventaja de la conexión remota es que si utiliza una oficina remota, puede conectarse de forma remota a la máquina de desarrollo a través de SSH para poder desarrollar localmente. Y si necesita ejecutar algún código local y no tiene un entorno, entonces la conexión remota es muy necesaria.

2.2 ¿Cómo utilizar SSH para conectarse de forma remota a la máquina de desarrollo?

2.2.1 Usar contraseña para conexión remota SSH

Primero, utilizamos el método de ingresar la contraseña para la conexión remota SSH. Más adelante hablaremos sobre cómo configurar el inicio de sesión sin contraseña.

Después de completar la creación de la máquina de desarrollo, debemos abrir la terminal powerShell de nuestra computadora y usarGanar+R Utilice la tecla de método abreviado para abrir el cuadro de ejecución, ingrese a powerShell y abra la terminal de powerShell. (Si está ejecutando el sistema operativo Linux o Mac, los siguientes pasos son los mismos)

Volvemos a la plataforma de la máquina de desarrollo y entramosmaquina de desarrolloBusque la máquina de desarrollo que creamos en la página y haga clicconexión SSH

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

luego copiaComando de inicio de sesión, 37367 aquí es el puerto SSH utilizado por la máquina de desarrollo. Generalmente, se usa el puerto 22 sin este número de puerto, no puede conectarse a SSH y el puerto de todos es diferente, por lo que si se está conectando a la máquina de desarrollo, no puede conectarse. , debe verificar si el puerto es incorrecto.

Pegue el comando copiado en PowerShell y presione Entrar. Aquí debemos ingresar la contraseña. Copiamos la contraseña bajo el comando de inicio de sesión y la pegamos en la terminal.Tenga en cuenta que después de copiar la contraseña, haga clic derecho para pegarla. La tecla de acceso directo del shell para pegar en algunas computadoras es.shift+ins, la contraseña pegada aquí no se mostrará, esto es normal.

Finalmente presione Enter y aparecerá el siguiente contenido, indicando éxito:

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Después de conectarnos a la máquina de desarrollo, podemos usarhostnamePara ver el nombre de la máquina de desarrollo, utiliceuname -aPara ver la información del kernel de la máquina de desarrollo, utilicelsb_release -aPara ver información de la versión de la máquina de desarrollo, utilicenvidia-smiVerifique la información de la GPU. Hablaremos de estos comandos más adelante. Si desea salir de la conexión remota, ingréselo dos veces.exitEso es todo.

2.2.2 Configurar la clave SSH para la conexión remota SSH

Pero cuando desarrollamos y estudiamos, es problemático ingresar la contraseña cada vez de forma remota. Podemos configurar la clave SSH para omitir el paso de ingresar la contraseña, podemos usarla.generador de claves sshcomando para generar la clave

La clave SSH es un método de autenticación de inicio de sesión seguro y conveniente, que se utiliza para la autenticación y la comunicación cifrada en el protocolo SSH.

generador de claves sshAdmite claves de autenticación RSA y DSA.

Los parámetros comúnmente utilizados incluyen:

  • -t: especifique el tipo de clave, como dsa, ecdsa, ed25519, rsa.
  • -b: especifica la longitud de la clave.
  • -C: Agregar comentarios.
  • -f: especifique el nombre del archivo para guardar la clave.
  • -i: lee archivos de clave pública/privada compatibles con ssh-v2 no cifrados.

Aquí usamos el algoritmo RSA para generar la clave, el comando es:

ssh-keygen -t rsa
  • 1

Después de ingresar el comandoEntra todo el caminoEso es todo, la clave aquí se genera de forma predeterminada en~/.ssh/bajo el directorio,~Significa el directorio de inicio, si es Windows, esC:Users{your_username} .Se puede utilizar en powerShellGet-ContentComando para ver la clave generada, que se puede utilizar si es un sistema operativo LinuxcatOrden.

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Luego regresamos a la plataforma de la máquina de desarrollo y hacemos clic en Configuración en la página de inicio.Clave SSH, luego haga clicAgregar clave pública SSH

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Copie la clave que acaba de generar y péguela en el cuadro de clave pública. El nombre se reconocerá automáticamente. Finalmente, haga clic en Agregar ahora y la configuración de la clave SSH estará completa.

Insertar descripción de la imagen aquí

Después de completar la creación de la clave SSH, reinicieTerminalAl conectarse de forma remota, se omitirá el paso de ingresar la contraseña.

2.2.3 Usar VScode para conexión remota SSH

Por supuesto, también puedes utilizar software de conexión remota SSH, como por ejemplo:Windterm, Xterminal esperar. Aquí usamos VScode para conexión remota. La ventaja de usar VScode es que es un editor de código, lo cual es muy conveniente para la modificación de código y otras operaciones.

Si queremos conectarnos de forma remota en VScode, también necesitamos instalar un conjunto de complementos. Puede buscar en línea cómo instalar VScode. (El vscode en la máquina de desarrollo no puede buscar este complemento, pero el vscode local sí puede)

Insertar descripción de la imagen aquí

Si ha instalado VScode, puede hacer clic en la página de extensión a la izquierda e ingresar "SSH" en el cuadro de búsqueda. El primero es el complemento que queremos instalar. Simplemente haga clic en "Instalar".

Insertar descripción de la imagen aquí

Después de instalar el complemento, haga clic en el ícono de conexión remota en la barra lateral, haga clic en el botón "+" en SSH y agregue el comando de inicio de sesión para la conexión SSH de la máquina de desarrollo.

Insertar descripción de la imagen aquí

Copiamos el comando de inicio de sesión, luego pegamos el comando en la ventana emergente y finalmente presionamos Enter:

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

El archivo de configuración predeterminado está bien, por supuesto, también puede personalizarlo. El siguiente es el contenido específico del archivo de configuración: (Esto incluye toda la información de su conexión 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

Si desea agregar algunas de las siguientes opciones de configuración manualmente, debe modificar las partes correspondientes de acuerdo con el formato anterior.

Si *StrictHostKeyChecking noyUserKnownHostsFile* /dev/nullElimine la ventana emergente que aparecerá para la verificación de huellas digitales:

Insertar descripción de la imagen aquí

StrictHostKeyChecking no Indica que la comprobación estricta de la clave del host está deshabilitada. Esto significa que al conectarse a un nuevo servidor SSH, la clave de host del servidor no se verificará estrictamente, lo que puede suponer un cierto riesgo de seguridad.

UserKnownHostsFile /dev/nullEstablece el archivo de clave de host conocido por el usuario en /dev/null, lo que esencialmente ignora la grabación y el uso de claves de host conocidas.

Sin embargo, en la práctica de seguridad general, no se recomienda desactivar arbitrariamente la verificación estricta de la clave del host.

Luego haga clic en "Conectar" en la ventana emergente que aparece en la esquina inferior derecha para conectarse de forma remota a la máquina de desarrollo.

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Una vez completada la conexión remota, puede elegir la carpeta que desea abrir, que también se puede llamar directorio de trabajo. Puede elegir la carpeta en la máquina de desarrollo o la carpeta local que mencionamos anteriormente.disco de nube

La próxima vez que realice una conexión remota, no necesita ingresar comandos de inicio de sesión ni otra información. Solo necesita abrir la conexión remota de vscode para ver la información de la máquina de desarrollo de la primera conexión, de la siguiente manera.rootSignifica que cuando nos conectamos por primera vez a la máquina de desarrollo, usamos/rootLista de trabajo.

Insertar descripción de la imagen aquí

Y en la imagen de abajo->Indica que debe volver a seleccionar el directorio de trabajo después de ingresar a la máquina de desarrollo:

Insertar descripción de la imagen aquí

Y en la imagen de abajo->Indica ingresar al directorio de trabajo seleccionado por la última máquina de desarrollo:

Insertar descripción de la imagen aquí

El directorio de trabajo seleccionado cada vez se mostrará debajo de la información de la máquina de desarrollo: (aquí hay un directorio de trabajo adicional para lagent)

Insertar descripción de la imagen aquí

A continuación presentaremos cuándoLa asignación de puertos

2.3. Mapeo de puertos

2.3.1 ¿Qué es el mapeo de puertos?

La asignación de puertos Es una tecnología de red que puede asignar cualquier puerto de la red externa al puerto correspondiente de la red interna para realizar la comunicación entre la red interna y la red externa. A través del mapeo de puertos, se puede acceder a servicios o aplicaciones en la intranet desde la red externa para lograr una comunicación conveniente a través de la red.

Entonces, ¿por qué necesitamos realizar un mapeo de puertos cuando utilizamos una máquina de desarrollo?

Porque en cursos posteriores realizaremos modelos.demostración web En la práctica de implementación, durante este proceso, es probable que encuentre el problema de la carga incompleta de la interfaz de usuario web.Esto se debe a que cuando se ejecuta web_demo en el Web IDE de la máquina de desarrollo, el acceso directo al servicio http/https en la máquina de desarrollo puede encontrar problemas de proxy.recursos de interfaz de usuarioNo cargado completamente.

Entonces, para resolver este problema, necesitamos asignar el puerto de la conexión que ejecuta web_demo yLos enlaces de la red externa están asignados a nuestro host local. , utilizamos el acceso a la conexión local para resolver este problema de proxy. Practiquémoslo ahora.

Insertar descripción de la imagen aquí

Primero, comprendamos cómo funciona el mapeo de puertos de la máquina de desarrollo según un diagrama:

A continuación se detallan pasos prácticos. Primero, comprenda cómo realizar el mapeo de puertos.

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

Lo anterior es un comando de mapeo de puertos. Ejecute este comando en el host para realizar el mapeo de puertos. Aquí hay un diagrama de flujo para comprender el proceso de mapeo de puertos:

Insertar descripción de la imagen aquí

La PC personal se conectará de forma remota al único puerto expuesto 37367 de la máquina de desarrollo (esto se menciona durante SSH, y el puerto expuesto de cada máquina de desarrollo es diferente) y configurará las opciones del túnel. El puerto expuesto sirve como estación de tránsito para el transporte de tráfico.

  • -C: habilite la compresión para reducir la cantidad de datos transferidos.
  • -N: No ejecuta comandos remotos, solo establece túneles.
  • -g: permite que los hosts remotos se conecten a puertos reenviados localmente.

Cuando este comando SSH se ejecuta en una PC personal, el cliente SSH escuchará en el puerto 7860 de la máquina local.

Cualquier tráfico enviado al puerto local 7860 será reenviado por el túnel SSH al puerto 7860 en la dirección 127.0.0.1 del servidor remoto.

Esto significa que incluso si este puerto de la máquina de desarrollo no está expuesto directamente a la red externa, podemos acceder de forma segura a los servicios en el servidor remoto a través de este túnel. .

2.3.2 ¿Cómo realizar el mapeo de puertos?
2.3.2.1 Usar el comando ssh para mapear puertos

Todavía vamos a la interfaz de la máquina de desarrollo, buscamos nuestra máquina de desarrollo y hacemos clicServicios personalizados, copia el primer comando,
Insertar descripción de la imagen aquí

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

Presentémosle el significado de cada parte del comando:

  • -p 37367: Especifica el puerto para la conexión SSH a 37367, que se mencionó anteriormente.
  • [email protected]: Indica utilizar root La identidad del usuario se conecta assh.intern-ai.org.cn este anfitrión.
  • -CNg
    • -C Normalmente se utiliza para habilitar la compresión.
    • -N Indica que no se ejecutan comandos remotos, sino que solo se establecen conexiones para reenvío de puertos, etc.
    • -g Permita que los hosts remotos se conecten a puertos reenviados localmente.
  • -L {本地机器_PORT}:127.0.0.1:{开发机_PORT}: Esto es para configurar el reenvío de puerto local para reenviar el puerto especificado de la máquina local (mediante {本地机器_PORT} representa) reenviado al host remoto (aquí es decirssh.intern-ai.org.cn)de 127.0.0.1 (es decir, la dirección de loopback local) y el puerto de la máquina de desarrollo especificado (definido por{开发机_PORT} expresar).
  • -o StrictHostKeyChecking=no: Desactive la verificación estricta de claves de host para evitar mensajes o errores debido a claves de host desconocidas al conectarse por primera vez.

Cuando ejecuta una demostración web, puede usar este comando para realizar el mapeo de puertos, por ejemplo:

Creamos un archivo hello_world.py (haga clic derecho en la interfaz de la máquina de desarrollo para crear el archivo y cambie el nombre a hello_world.py) y completamos el siguiente contenido en el archivo:

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

Recuerda después de editarctrl+sahorrar

Antes de ejecutar el código, debe utilizarpip install gradio==4.29.0Comando para instalar los siguientes paquetes de dependencia (copie y pegue el comando en la terminal) y luego ejecute uno en la terminal de Web IDEpython hello_world.pyOrden

Insertar descripción de la imagen aquí

Si no se realiza la asignación de puertos, no se podrá acceder a ellos mediante la IP local.

Insertar descripción de la imagen aquí

Puedo ingresar esto en powerShell usando el siguiente comando:

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

Insertar descripción de la imagen aquí

Esto representa el éxito. (Aviso: Este comando no devuelve ningún contenido, lo que significa que la asignación de puertos se está ejecutando y luego puede ver la interfaz de usuario web abriendo la conexión en la página web)

Insertar descripción de la imagen aquí

2.3.2.2 Usar vscode para mapeo de puertos

Por supuesto, si ejecutamos diferentes UI web, debemos ingresar comandos repetidamente, lo cual es muy problemático, y debemos usar VScode.Hemos conectado la máquina de desarrollo de forma remota a través de SSH. VScode proporciona asignación automática de puertos. No necesitamos configurarlo manualmente. Podemos usar la tecla de acceso directo "Ctrl+Shift+~".Despierta la terminal, las opciones de puerto se pueden encontrar en el lado derecho de la terminal:

Insertar descripción de la imagen aquí

Aquí puede ver la información de asignación de puertos. Si necesita modificar el puerto, puede modificar el número de puerto en la columna de puerto.

3. Comandos básicos de Linux

En esta parte, lo llevaré a comprender algo de Linux.Operaciones básicas y utilizar algunas herramientas. Para que todos puedan resolverlo por sí mismos cuando tengan problemas. Si tienes algún problema, también puedes comentar aquí y te responderé a tiempo.

porque usamosmaquina de desarrolloraramente usadogestión de autoridad , por lo que no lo presentaremos. (Todas las siguientes operaciones se realizan en la terminal VScode)

3.1 Gestión de archivos

En Linux, las operaciones comunes de administración de archivos incluyen:

  • Crear un archivo:puedo usar touch El comando crea un archivo vacío.
  • Crear un directorio:usar mkdir Orden.
  • Cambio de directorio:usarcdOrden.
  • Mostrar directorio:usarpwdOrden.
  • Ver contenido del archivo: Si se usa cat Mostrar directamente todo el contenido del archivo,more yless Se puede ver en páginas.
  • Editar archivo:como vi ovim Espera al editor.
  • Copiar archivos:usar cp Orden.
  • Crear enlace de archivo:usarlnOrden.
  • Mover archivos:aprobar mv Orden.
  • Borrar archivos:usar rm Orden.
  • eliminar directoriormdir(Solo se pueden eliminar directorios vacíos) o rm -r(Se pueden eliminar directorios que no estén vacíos).
  • encontrar archivos:Puedo usar find Orden.
  • Ver detalles de un archivo o directorio:usarlscomando, como usar ls -lVer información detallada sobre los archivos en un directorio.
  • Archivos de proceso: Para operaciones de archivos complejas, puede utilizarsedOrden.

Aquí hay varios comandos que usaremos en el curso:

3.1.1 tocar

Podemos usar el tacto para crear archivos rápidamente, de modo que no tengamos que hacer clic manualmente para crearlos.Por ejemplo, queremos crear undemo.pydocumento:

3.1.2 mkdir

De la misma manera, si desea crear un archivo llamadotestDirectorio:

Insertar descripción de la imagen aquí

3.1.3 cd

Este comando será el comando más utilizado. Antes de usarlo, debe explicar la estructura del directorio a los estudiantes que no tienen conocimientos de informática y hacer un dibujo para que todos lo entiendan:

Insertar descripción de la imagen aquí

Lo que estamos usando ahora esrootdirectorio, que también es el directorio de inicio del usuario raíz.~, en sistema operativo linux/Representa el directorio raíz. Hay muchos directorios y archivos requeridos por el sistema en el directorio raíz.rootdirectorio, entre los cuales.Representa el directorio actual,.. El directorio principal representado.Si tuviera que entrar ahoratestdirectorio y luego regresar arootDirectorio, podemos hacer esto:

3.1.4 contraseña

nosotros podemos usarpwdComando para ver el directorio actual: Esto nos facilita determinar en qué directorio nos encontramos actualmente.

Insertar descripción de la imagen aquí

3.1.5 gato

catEl comando puede ver el contenido del archivo y se pueden usar más comandos--helpComando para ver:

  • -a, --show-all es equivalente a -vET
  • -b, –number-número no en blanco de líneas de salida no vacías, anula -n
  • -e, equivalente a -vE
  • -E, --show -end muestra $ al final de cada línea
  • -n, --number número todas las líneas de salida
  • -s, --crick-blank suprime las líneas de salida vacías repetidas
  • -t es equivalente a -vT
  • -t, --show-tabs muestra los caracteres de tabulación como ^I
  • -v, --show usos no imprimibles ^ y notación M, excepto LFD y TAB
3.1.6 vi o vim

Podemos usarlo cuando necesitemos editar archivos.viovimcomando, cuando ingresa a la edición de archivos, hay tres modos:

Insertar descripción de la imagen aquí

Ingrese al modo de edición para usari, la conveniencia de vim es que puede realizar modificaciones simples de archivos en la terminal.

3.1.7 cp y ln (énfasis)

**cp**El comando se utilizará con frecuencia en los siguientes cursos. Se utiliza para copiar un archivo o directorio a otro directorio.

  • Copiar archivos:cp 源文件 目标文件
  • Copiar directorio:cp -r 源目录 目标目录

Pero si queremos usar el modelo, esta operación ocupará mucho espacio en el disco, por lo que generalmente usamosln comando, esto es lo mismo que el acceso directo de Windows. Hay dos tipos de enlaces en Linux:enlace duro(enlace duro) conenlace suave (enlace simbólico), un enlace físico significa que un archivo puede tener varios nombres, mientras que un enlace suave genera un archivo especial cuyo contenido apunta a la ubicación de otro archivo. Los enlaces físicos existen en el mismo sistema de archivos, pero los enlaces blandos pueden abarcar diferentes sistemas de archivos.

Por lo tanto, generalmente utilizamos conexiones suaves. Sus métodos de uso comunes son los siguientes:

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

Los parámetros son los siguientes:

  • -s: la creación de enlaces suaves (enlaces simbólicos) también es la más utilizada;
  • -f: fuerza la ejecución, sobrescribe los archivos de destino existentes;
  • -i: modo interactivo, si el archivo existe, se le preguntará al usuario si desea sobrescribirlo;
  • -n: trata los enlaces simbólicos como directorios generales;
  • -v: muestra el procesamiento detallado.
3.1.8 mv y rm

mvcomando yrmLos comandos se usan de manera similar, peromvSe utiliza para mover archivos o directorios y también se le puede cambiar el nombre.rmEl comando se utiliza para eliminar archivos o directorios.

Los métodos comúnmente utilizados son los siguientes:

  • comando mv

Parámetros comúnmente utilizados:

  • -i: Modo interactivo, pregunte antes de sobrescribir.
  • -f: Forzar cobertura.
  • -u: Mover sólo si el archivo de origen es más nuevo que el archivo de destino.

Ejemplo de uso:

  • mv file1.txt dir1/: mover el archivo file1.txt Mover al directoriodir1 medio.

  • mv file1.txt file2.txt: mover el archivo file1.txt Cambiar nombre afile2.txt

  • comando rm

Parámetros comúnmente utilizados:

  • -i: Modo interactivo, preguntar antes de borrar.
  • -f: Eliminación forzada, ignorando archivos inexistentes, sin pedir confirmación.
  • -r:Eliminar recursivamente un directorio y su contenido.

Ejemplo de uso:

  • rm file.txt:Borrar archivos file.txt
  • rm -r dir1/: Eliminar directorios recursivamente dir1 y todo su contenido.

También se puede utilizar el comando para eliminar un directorio.rmdir

3.1.9 encontrar

findEl comando es una poderosa herramienta de búsqueda de archivos en el sistema Linux. Puede encontrar archivos o directorios que cumplan las condiciones en el directorio especificado y sus subdirectorios y realizar las operaciones correspondientes.

Lo siguiente esfindAlgunos usos comunes del comando:

  1. Buscar por nombre de archivo:usar-name Opción para buscar archivos por nombre de archivo. Por ejemplo,find /path/to/directory -name "file.txt"buscará en el directorio especificado y sus subdirectorios llamadosfile.txtdocumento.
  2. Buscar por tipo de archivo:usar-type Opción para buscar archivos por tipo de archivo. Por ejemplo,find /path/to/directory -type fSe encontrarán todos los archivos normales en el directorio especificado y sus subdirectorios.
  3. Buscar por tamaño de archivo:usar-size opción para buscar archivos por tamaño de archivo. Por ejemplo,find /path/to/directory -size +100MEncontrará archivos de más de 100 MB en el directorio especificado y sus subdirectorios.
  4. Buscar por hora de modificación:usar-mtime-atimeo-ctime Las opciones buscan archivos según su hora de modificación, hora de acceso o hora de cambio de estado. Por ejemplo,find /path/to/directory -mtime -7Encontrará archivos en el directorio especificado y sus subdirectorios que hayan sido modificados dentro de los 7 días.
  5. Buscar por permisos de archivo:usar-perm Opción para buscar archivos según los permisos de archivo. Por ejemplo,find /path/to/directory -perm 755Encontrará archivos con permiso 755 en el directorio especificado y sus subdirectorios.
  6. Buscar por usuario o grupo:usar-usero-group Las opciones buscan archivos por propietario o grupo. Por ejemplo,find /path/to/directory -user usernameBuscará el directorio especificado y sus subdirectorios pertenecientes al usuario.usernamedocumento.
  7. realizar operaciones:usar-exec Las opciones pueden realizar las operaciones correspondientes en los archivos encontrados. Por ejemplo,find /path/to/directory -name "*.txt" -exec rm {} ;eliminará todos los encontrados que terminen con.txtarchivo al final.
3.1.10 es

lsEl comando se puede utilizar para enumerar el contenido de un directorio, así comodetalles

Los parámetros y métodos de uso más utilizados son los siguientes:

  • -a: muestra todos los archivos y directorios, incluidos los archivos ocultos (más allá de.archivo o directorio que comienza con .).
  • -l: Muestra información detallada en formato largo, incluidos permisos de archivos, propietario, tamaño, hora de modificación, etc.
  • -h:y-lSe utiliza en combinación para mostrar el tamaño del archivo de forma legible por humanos (p. ej.KMGesperar).
  • -R: enumera el contenido de los subdirectorios de forma recursiva.
  • -t : Visualización en orden de tiempo de modificación del archivo. ,

Insertar descripción de la imagen aquí

3.1.11 sed

sedCommand es un editor de secuencias, que se utiliza principalmente para el procesamiento de texto. A menudo se utiliza al procesar operaciones de archivos complejas. Se utilizará en cursos posteriores.sedLos parámetros de uso común y ejemplos de uso de comandos son los siguientes:

  • Descripción de parámetros:
    • -e<script> o--expression=<script>: Especifique scripts directamente en la línea de comando para el procesamiento de texto.
    • -f<script文件> o--file=<script文件>: lea el script del archivo de script especificado para procesar texto.
    • -n o--quiet o--silent: Imprima solo los resultados de salida procesados ​​por el script y no imprima líneas que no coincidan.
  • Acción Descripción:
    • a: agrega la cadena de texto especificada a la siguiente línea de la línea actual.
    • c: Reemplaza el rango de líneas especificado con la cadena de texto especificada.
    • d: elimina la fila especificada.
    • i: Agrega la cadena de texto especificada a la línea anterior de la línea actual.
    • p : Imprime las líneas seleccionadas.generalmente con-n Usado junto con los parámetros, solo se imprimen las líneas coincidentes.
    • s : utilice expresiones regulares para reemplazar texto. Por ejemplo,s/old/new/g Reemplace todos los "InternLM" con "InternLM yyds".
  • Ejemplo:

Insertar descripción de la imagen aquí

usado en el ejemploechocomando, esto es lo mismo que en PythonprintLo mismo, se usa para imprimir contenido, aquí se usa el carácter de barra vertical.>Imprima InternLM en un archivo. Los caracteres de canalización utilizados habitualmente incluyen.<y|, por ejemplo podemos usargrepComando para ver las inclusiones instaladas en PythonosPaquete de campo:

Insertar descripción de la imagen aquí

grep Es una poderosa herramienta de búsqueda de texto. Los parámetros comúnmente utilizados son los siguientes:

  • -i: Búsqueda independientemente del caso.
  • -v: Invierte la coincidencia, es decir, muestra líneas no coincidentes.
  • -n: Muestra el número de línea.
  • -c: Cuente el número de líneas coincidentes.

3.2 Gestión de procesos

Gestión de procesoLos comandos son herramientas importantes para el monitoreo del sistema y la gestión de procesos. Los comandos de gestión de procesos más utilizados incluyen los siguientes:

  • PD: Ver procesos en ejecución
  • arriba: Visualización dinámica de procesos en ejecución.
  • árbol de Navidad: Ver procesos en ejecución en vista de árbol
  • grep: utilizado para encontrar procesos
  • lindo:Cambiar la prioridad de un proceso
  • trabajos: Muestra información relacionada con el proceso
  • bg y fg: Mover el proceso a un segundo plano
  • matar: proceso de matanza

También hay un comando especial en la máquina de desarrollo.nvidia-smi , que es una herramienta de línea de comandos para la interfaz de administración del sistema NVIDIA, que se utiliza para monitorear y administrar dispositivos GPU NVIDIA. Proporciona una forma rápida de ver información como el estado de la GPU, el uso, la temperatura, el uso de la memoria, el uso de energía y los procesos que se ejecutan en la GPU.

Los siguientes son ejemplos de uso de cada comando:

  • ps : enumera los procesos en el sistema actual. Se puede mostrar diferente información del proceso usando diferentes opciones, tales como:
    • ps aux  # 显示系统所有进程的详细信息
      
      • 1
  • top : muestra dinámicamente el estado de los procesos en el sistema. Actualiza la lista de procesos en tiempo real, mostrando los procesos con mayor uso de CPU y memoria.
    • top  # 启动top命令,动态显示进程信息
      
      • 1
  • pstree: Muestra los procesos actualmente en ejecución y sus relaciones padre-hijo en forma de diagrama de árbol.
    • pstree  # 显示进程树
      
      • 1
  • pgrep : Encuentre procesos que coincidan con los criterios. Puede buscar procesos según el nombre del proceso, el usuario y otras condiciones.
    • pgrep -u username  # 查找特定用户的所有进程
      
      • 1
  • nice: Cambia la prioridad de un proceso.nice Cuanto menor sea el valor, mayor será la prioridad del proceso.
    • nice -n 10 long-running-command  # 以较低优先级运行一个长时间运行的命令
      
      • 1
  • jobs: muestra una lista de trabajos en la sesión actual del terminal, incluidos los procesos que se ejecutan en segundo plano.
    • jobs  # 列出当前会话的后台作业
      
      • 1
  • bg yfgbg Ponga el proceso suspendido para que se ejecute en segundo plano,fg Vuelva a poner el proceso en segundo plano en primer plano.
    • bg  # 将最近一个挂起的作业放到后台运行
      fg  # 将后台作业调到前台运行
      
      • 1
      • 2
  • kill: envía una señal al proceso especificado, generalmente utilizada para finalizar el proceso.
    • kill PID  # 杀死指定的进程ID
      
      • 1
    • Aviso,kill El comando se envía por defecto.SIGTERM Señal, que se puede utilizar si el proceso no responde.-9usarSIGKILL Signal mata con fuerza el proceso:

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

SIGTERM La señal (Terminación de señal) es una señal estándar utilizada en Unix y sistemas operativos similares a Unix para solicitar la terminación del proceso. Esta señal generalmente se envía cuando el sistema o el usuario desea cerrar un proceso correctamente.ySIGKILLLas señales son diferentes,SIGTERM Las señales pueden ser captadas y manejadas por un proceso, lo que permite que el proceso se limpie antes de salir. (desde Internet)

Lo siguiente es nvidia-smi Algunos usos básicos de los comandos:

  • Muestra información resumida sobre el estado de la GPU:
    • nvidia-smi
      
      • 1
  • Muestra información detallada del estado de la GPU:
    • nvidia-smi -l 1
      
      • 1
    • Este comando actualizará la información de estado cada 1 segundo.

  • Mostrar el historial de uso de GPU:
    • nvidia-smi -h
      
      • 1
  • Enumere todas las GPU y muestre sus PID y nombres de procesos:
    • nvidia-smi pmon
      
      • 1
  • Finalice con fuerza el proceso de GPU especificado:
    • nvidia-smi --id=0 --ex_pid=12345
      
      • 1
    • Esto finalizará forzosamente el proceso con PID 12345 en GPU ID 0.

  • Establecer el modo de rendimiento de la GPU:
    • nvidia-smi -pm 1
      nvidia-smi -i 0 -pm 1
      
      • 1
      • 2
    • El primer comando configurará todas las GPU en modo de rendimiento, el segundo comando solo apunta a la GPU con ID 0.

  • Reinicie la GPU:
    • nvidia-smi --id=0 -r
      
      • 1
    • Esto reiniciará la GPU con ID 0.

  • Mostrar información de ayuda:
    • nvidia-smi -h
      
      • 1

La siguiente es una introducción a la información de la GPU a través de una imagen:

Insertar descripción de la imagen aquí

3.3 Uso de herramientas

Aquí hay una herramientaTMUXTMUX es un multiplexor de terminales. Hace que sea fácil cambiar entre múltiples terminales, desconectarlos (esto no mata los terminales, continúan ejecutándose en segundo plano) y reconectarlos a otros terminales. ¿Por qué introducir esta herramienta?Porque se hará más tarde.XtunerLlevará mucho tiempo ajustar el modelo.TmuxPuede resolver la situación en la que el programa se cierra o se interrumpe. A continuación se explica cómo instalarlo y utilizarlo.

Debido a que la máquina de desarrollo usa el sistema operativo ubuntu, puedes usarlsb_release -a Comando para ver la información del sistema ubuntu:

Insertar descripción de la imagen aquí

y luego usarapt install tmuxComando para instalar tmux. Puede usarlo una vez completada la instalación.tmuxPuede usar tmux con el comando. Si desea salir de tmux, puede usar ".Ctrl+d"tecla de acceso directo.

En la máquina de desarrollo, solo los archivos en la ruta /root se almacenan de forma persistente. El software instalado en otras rutas se restablecerá después del reinicio.

Los métodos de uso específicos se pueden ver en:

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

4. Introducción a Conda y Shell (adicional)

Conda es un sistema de gestión de entornos y gestión de paquetes de código abierto que se ejecuta en Windows, macOS y Linux. Instala, ejecuta y actualiza rápidamente paquetes de software y sus dependencias. Con Conda puede crear, guardar, cargar y cambiar fácilmente diferentes entornos en su máquina local.

Ya instalado en la máquina de desarrollo.conda, podemos usarlo directamente, y también hay uno integrado en la máquina de desarrollocondaOrdenstudio-conda, presentaremos a continuacióncondaUso básico de ystudio-condaCómo utilizar e introducirstudio-conda¿Cómo se logra?

Lo presentaremos en las siguientes partes:

  1. configuración de conda
  2. gestión ambiental conda
  3. conda y pip
  4. Studio-conda se usa con Shell (extensión)

4.1 configuración de conda

nosotros podemos usarconda --versionpara ver la máquina de desarrollo actualcondainformación de versión:

Insertar descripción de la imagen aquí

cuando queremos usarcondaLa instalación del paquete será muy lenta. Podemos configurar la duplicación doméstica para mejorar la velocidad de instalación. El ejemplo es el siguiente:

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

Pero normalmente usamospipInstalando el paquete, lo presentaremos más adelante.pipycondadiferencia.

Si queremos ver la información de configuración de conda, podemos usarconda config --showcomando, si es la configuración predeterminada de la máquina de desarrollo, devolverá: (parte de la información)

Insertar descripción de la imagen aquí

Estas configuraciones están enCondaLa configuración del entorno afectará los métodos y resultados de la instalación del paquete de software, las actualizaciones, la gestión del entorno y otras operaciones.

4.2 gestión del entorno conda

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

4.2.1 Crear un entorno virtual

nosotros podemos usarconda create -n name python``=3.10 Crear un entorno virtual, lo que significa que se crea un entorno virtual con la versión 3.10 de Python y su nombre.Después de la creación, puedes.condabajo el directorioenvsEncontrado en el directorio.

Insertar descripción de la imagen aquí

Cuando no se especifica la versión de Python, se creará automáticamente un entorno virtual basado en la última versión de Python. Al mismo tiempo podremos instalar los paquetes necesarios mientras creamos el entorno virtual:conda create -n name numpy matplotlib python=3.10(Pero no te recomiendo que lo uses de esta manera)

Los parámetros comunes para crear un entorno virtual son los siguientes:

  • -n o --name: especifique el nombre del entorno que se creará.
  • -c o --channel: especifica canales de paquetes adicionales.
  • –clonar: clonar un entorno existente para crear un entorno nuevo.
  • -p o --prefix: especifique la ruta de instalación del entorno (ubicación no predeterminada).
4.2.2 Comprobar qué entornos virtuales hay

Si queremos ver qué entornos virtuales tenemos podemos utilizar el siguiente comando:

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

Insertar descripción de la imagen aquí

Al mismo tiempo, también podemos ver el directorio donde se encuentra el entorno.

4.2.3 Activar y salir del entorno virtual

Después de crear el entorno virtual podemos usarconda activate name Comando para activar el entorno virtual, ¿cómo comprobar si el cambio se realizó correctamente?Es fácil, solo mira(base)Si se convierte en el nombre del entorno virtual creado.

Insertar descripción de la imagen aquí

Si desea salir del entorno virtual, puede utilizar:

conda activate
conda deactivate
  • 1
  • 2

Ambos comandos regresaránbaseambiente porquebaseEs el entorno básico de conda. Si observa con atención,baseEl directorio del entorno es de mayor nivel que otros directorios del entorno virtual.

4.2.4 Eliminar y exportar entorno virtual

Si desea eliminar un entorno virtual, puede utilizarconda remove --name name --all, si solo elimina uno o algunos paquetes en el entorno virtual, puede usarconda remove --name name package_name

Exportar un entorno virtual es muy necesario para un entorno específico, porque las dependencias de algunos paquetes de software son muy complejas y será problemático recrearlo y configurarlo usted mismo. Si exportamos el entorno configurado, podremos restaurarlo la próxima vez. y también puedes compartir la configuración con otros.

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

Por ejemplo lo haremosxtuner0.1.17El entorno virtual se exporta y la información de configuración es la siguiente:

Insertar descripción de la imagen aquí

Éstas incluyennombre del entornoLa ubicación del repositorio en línea para paquetes de entorno virtual.yDependencias del entorno virtual . Posteriormente utilizaremos métodos de uso avanzados para restaurar rápidamente el entorno virtual.

4.3 conda y pip

En esta parte presentamos algunoscondaypipAlgunas diferencias:

  1. conda puede administrar paquetes que no son de Python y pip solo puede administrar paquetes de Python.
  2. conda se puede utilizar para crear un entorno virtual, pero pip no puede y necesita depender de paquetes como virtualenv.
  3. El paquete instalado por conda está compilado.archivo binario, los paquetes dependientes se instalarán automáticamente durante la instalación de los archivos del paquete; los paquetes instalados por pip son;rueda o código fuente, no se admitirán dependencias distintas del lenguaje Python durante el proceso de instalación.
  4. Los paquetes instalados por conda se descargarán al directorio correspondiente al entorno virtual actual y se podrán descargar una vez e instalar varias veces. pip se descarga directamente al entorno correspondiente.

Rueda Es un formato del paquete de instalación de Python.

Es un formato de distribución binaria precompilado, similar a los binarios compilados en conda.

Las principales ventajas del formato Wheel incluyen:

  1. Instalación rápida: debido a que ha sido precompilado, no es necesario pasar por el proceso de compilación como la instalación del código fuente durante la instalación, lo que ahorra tiempo.
  2. Consistencia: garantiza que los resultados de la instalación sean consistentes en diferentes sistemas y entornos.

Por ejemplo, si desea instalar una biblioteca Python grande, usar el formato Wheel puede evitar problemas de instalación causados ​​por diferencias en los entornos de compilación en diferentes máquinas. Además, para aquellos sistemas que no tienen un entorno de compilación o tienen capacidades de compilación débiles, el formato Wheel puede hacer que el proceso de instalación sea más sencillo.

4.4 Uso de Studio-conda y Shell (extensión)

Esta parte es una parte extendida, porque creo que es muy interesante y muy práctica, así que si estás interesado, puedes aprenderla.

Primero presentemosstudio-conda , que es un comando integrado en la máquina de desarrollo y se implementa mediante un script de Shell. ¿Qué es un script de Shell?

script de shell Un archivo de texto que contiene una serie de comandos dispuestos en un orden específico para automatizar tareas en un entorno de sistema operativo Unix/Linux o similar.

Los scripts de Shell generalmente se escriben en el lenguaje Shell. Los lenguajes Shell comunes, como Bash, Sh, etc., son los comandos básicos de Linux que presentamos anteriormente y pertenecen al lenguaje Shell.

Tiene las siguientes características importantes:

  1. automatización : Se puede escribir una serie de operaciones repetitivas y complejas como un script y luego simplemente ejecutar el script para automatizar estas operaciones, ahorrando tiempo y reduciendo errores. Por ejemplo, un script que realiza copias de seguridad de archivos importantes todos los días.
  2. Gestión del sistema : Se utiliza para gestionar la configuración del sistema, permisos de usuario, control de procesos, etc. Por ejemplo, un script que crea un nuevo usuario y establece sus permisos.
  3. Procesamiento por lotes : Capacidad de procesar múltiples archivos o datos simultáneamente. Por ejemplo, un script que convierte un lote de archivos de imágenes de un formato a otro.
  4. control de procesos: Como juicio condicional (if-else), bucle (for, while), etc., permite que los scripts realicen diferentes operaciones según diferentes situaciones.

Esostudio-condaEs parte de la automatización. El archivo de configuración del entorno bash del usuario root en nuestra máquina de desarrollo es..bashrc, pero de hecho el archivo de configuración principal es/share/.aide/config/bashrc, hay algunos comandos escritos en este archivo que nos permiten realizar algunas operaciones más rápidamente, como por ejemplo:

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

exportse utiliza para establecer variables de entorno.aliases copiar un archivo sh en una variable. Esto se puede ejecutar en la terminal como un comando.studio-condaEso es todo.

aquístudio-smiSe utiliza para comprobar el uso de la memoria virtual cuando abrimos./share/studio-smiEl archivo se puede ver:

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

Este script se utiliza para comprobar si hay un vgpu-smi comando, si está presente, se ejecutarávgpu-smi para mostrar información de estado de una GPU virtual (vGPU); si no está presente, se ejecutará;nvidia-smi para mostrar información de estado de la GPU NVIDIA. Como se muestra abajo:

Insertar descripción de la imagen aquí

nvidia-smi es una herramienta para monitorear y administrar dispositivos físicos de GPU NVIDIA, yvgpu-smi Diseñado para monitorear y administrar recursos de GPU virtualizados a través de la tecnología NVIDIA vGPU.

nosotros vemos/share/install_conda_env.shEl contenido del archivo es el siguiente:

#!/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 de ellos*list*()Espera, es todostudio-condafunción, que puede implementar ciertas operaciones, por ejemplo, podemos usarstudio-conda env listPara ver el entorno predeterminado:

Insertar descripción de la imagen aquí

en*clone*()La función principal de la función es copiar el entorno, pero solo se puede copiar desde el entorno predeterminado. El código principal es en realidad:

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

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

Descomprima el paquete comprimido del entorno preestablecido y luego cree un entorno virtual mediante clonación. Sin embargo, también se establece cierta lógica en el script de Shell, pero es solo una cuestión de criterio. Si está familiarizado con algún lenguaje de programación, debería poder hacerlo. para entenderlo. Si no puedes entenderlo, tampoco es un gran problema.

Entonces, ¿cómo agregamos nuestro propio entorno creado astudio-conda¿Qué pasa con el medio?

El primer paso es crear un nuevo entorno conda en /share/conda_envs

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

El segundo paso es copiar los archivos en /root/.conda/pkgs en la máquina local a /share/pkgs, recomprimirlos y reemplazarlos (este paso es almacenar los paquetes públicos grandes durante el proceso de creación de conda para evitar descargas repetidas).

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

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

El tercer paso es actualizar la función de lista en install_conda_env.sh y agregar una nueva descripción del entorno conda.

El anterior es el método proporcionado por la máquina de desarrollo de forma predeterminada. De hecho, existe otro método que utilizamos anteriormente.condaExportadoxtuner0.1.17Archivos de configuración para entornos virtuales, podemos utilizarconda env create -f xtuner0.1.17.yml comando para restaurar el entorno virtual.Escribamos un script de Shell simple para implementar esta operación: Creamostest.sharchivo, escriba el siguiente contenido:

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

Después de completar la creación del script de Shell, debemos otorgar permisos al script. Puede usar el comando:chmod +x test.sh , luego ingresa./test.sh restore xtuner0.1.17Y presione Enter para restaurar el entorno virtual.

Insertar descripción de la imagen aquí

Sin embargo, esto no es muy diferente del uso directo. Si esta operación se compara con la operación en la máquina de desarrollo,studio-conda Combinar los comandos será muy conveniente, pero los métodos para copiar el entorno son diferentes.Por lo tanto, si desea implementarlo, debe/share/install_conda_env.shSe modifica la lógica del archivo.

Bien, ese es todo el contenido de este nivel. Espero que el contenido anterior sea útil para todos en el futuro. Si desea obtener más información sobre Linux, puede leer el artículo de mi blog. Aunque no sé cómo usar Linux. Será útil para nosotros aprender. Los modelos grandes no tienen mucho impacto, pero si aprende bien Linux, su aprendizaje de modelos grandes será muy sencillo. Finalmente, ¡no olvides completar los niveles que establecimos anteriormente!

Enlace del blog:Linux

problema comun

1. El entorno de la máquina de desarrollo de InternStudio no funciona. ¿Cómo inicializar el entorno de la máquina de desarrollo?

¡Ejecute con cuidado! ! ! !Se perderán todos los datos. Esto solo está disponible en la plataforma InternStudio. No haga esto en su propia máquina.

  • El primer paso es conectar el terminal local a la máquina de desarrollo a través de ssh (¡¡debe estar conectado a través de ssh para operar, no en la web!!!)
  • Ejecución del segundo paso rm -rf /root, tardará unos 10 minutos en esperar
  • El tercer paso es reiniciar la máquina de desarrollo. El sistema restablecerá el archivo de configuración en la ruta /root.
  • el cuarto paso ln -s /share /root/share

misión de nivel

Para pasar la misión de nivel, debes tomar capturas de pantalla en pasos clave:

detalles de la misiónTiempo requerido para completar
MisiónComplete la conexión SSH y el mapeo de puertos y ejecútelohello_world.py10 minutos
Tarea opcional 1Complete los comandos básicos de Linux en la máquina de desarrollo.10 minutos
Tarea opcional 2Utilice VSCODE para conectarse de forma remota a la máquina de desarrollo y crear un entorno conda10 minutos
Tarea opcional 3Crear y ejecutartest.shdocumento10 minutos