Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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.
😀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!
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:
Déjame decirte las funciones de las páginas correspondientes a cada número de serie:
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”
Aquí elegimos crearmáquina de desarrollo personal, llamadoprueba,CudaLa 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.
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
en:
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。
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.
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。
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:
Después de conectarnos a la máquina de desarrollo, podemos usarhostname
Para ver el nombre de la máquina de desarrollo, utiliceuname -a
Para ver la información del kernel de la máquina de desarrollo, utilicelsb_release -a
Para ver información de la versión de la máquina de desarrollo, utilicenvidia-smi
Verifique 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.exit
Eso es todo.
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:
Aquí usamos el algoritmo RSA para generar la clave, el comando es:
ssh-keygen -t rsa
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-Content
Comando para ver la clave generada, que se puede utilizar si es un sistema operativo Linuxcat
Orden.
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,
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.
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.
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)
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".
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.
Copiamos el comando de inicio de sesión, luego pegamos el comando en la ventana emergente y finalmente presionamos Enter:
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
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
no
yUserKnownHostsFile
*/dev/null
Elimine la ventana emergente que aparecerá para la verificación de huellas digitales:
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/null
Establece 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.
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.root
Significa que cuando nos conectamos por primera vez a la máquina de desarrollo, usamos/root
Lista de trabajo.
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:
Y en la imagen de abajo->
Indica ingresar al directorio de trabajo seleccionado por la última máquina de desarrollo:
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)
A continuación presentaremos cuándoLa asignación 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.
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
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:
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. .
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,
ssh -p 37367 [email protected] -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no
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()
Recuerda después de editarctrl+s
ahorrar
Antes de ejecutar el código, debe utilizarpip install gradio==4.29.0
Comando 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.py
Orden
Si no se realiza la asignación de puertos, no se podrá acceder a ellos mediante la IP local.
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
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)
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:
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.
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)
En Linux, las operaciones comunes de administración de archivos incluyen:
touch
El comando crea un archivo vacío.mkdir
Orden.cd
Orden.pwd
Orden.cat
Mostrar directamente todo el contenido del archivo,more
yless
Se puede ver en páginas.vi
ovim
Espera al editor.cp
Orden.ln
Orden.mv
Orden.rm
Orden.rmdir
(Solo se pueden eliminar directorios vacíos) o rm -r
(Se pueden eliminar directorios que no estén vacíos).find
Orden.ls
comando, como usar ls -l
Ver información detallada sobre los archivos en un directorio.sed
Orden.Aquí hay varios comandos que usaremos en el curso:
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.py
documento:
De la misma manera, si desea crear un archivo llamadotest
Directorio:
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:
Lo que estamos usando ahora esroot
directorio, 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.root
directorio, entre los cuales.
Representa el directorio actual,..
El directorio principal representado.Si tuviera que entrar ahoratest
directorio y luego regresar aroot
Directorio, podemos hacer esto:
nosotros podemos usarpwd
Comando para ver el directorio actual: Esto nos facilita determinar en qué directorio nos encontramos actualmente.
cat
El comando puede ver el contenido del archivo y se pueden usar más comandos--help
Comando para ver:
Podemos usarlo cuando necesitemos editar archivos.vi
ovim
comando, cuando ingresa a la edición de archivos, hay tres modos:
Ingrese al modo de edición para usari
, la conveniencia de vim es que puede realizar modificaciones simples de archivos en la terminal.
**cp
**El comando se utilizará con frecuencia en los siguientes cursos. Se utiliza para copiar un archivo o directorio a otro directorio.
cp 源文件 目标文件
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 [参数][源文件或目录][目标文件或目录]
Los parámetros son los siguientes:
mv
comando yrm
Los comandos se usan de manera similar, peromv
Se utiliza para mover archivos o directorios y también se le puede cambiar el nombre.rm
El comando se utiliza para eliminar archivos o directorios.
Los métodos comúnmente utilizados son los siguientes:
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
。
find
El 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 esfind
Algunos usos comunes del comando:
-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.txt
documento.-type
Opción para buscar archivos por tipo de archivo. Por ejemplo,find /path/to/directory -type f
Se encontrarán todos los archivos normales en el directorio especificado y sus subdirectorios.-size
opción para buscar archivos por tamaño de archivo. Por ejemplo,find /path/to/directory -size +100M
Encontrará archivos de más de 100 MB en el directorio especificado y sus subdirectorios.-mtime
、-atime
o-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 -7
Encontrará archivos en el directorio especificado y sus subdirectorios que hayan sido modificados dentro de los 7 días.-perm
Opción para buscar archivos según los permisos de archivo. Por ejemplo,find /path/to/directory -perm 755
Encontrará archivos con permiso 755 en el directorio especificado y sus subdirectorios.-user
o-group
Las opciones buscan archivos por propietario o grupo. Por ejemplo,find /path/to/directory -user username
Buscará el directorio especificado y sus subdirectorios pertenecientes al usuario.username
documento.-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.txt
archivo al final.ls
El 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-l
Se utiliza en combinación para mostrar el tamaño del archivo de forma legible por humanos (p. ej.K
、M
、G
esperar).-R
: enumera el contenido de los subdirectorios de forma recursiva.-t
: Visualización en orden de tiempo de modificación del archivo. ,sed
Command 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.sed
Los parámetros de uso común y ejemplos de uso de comandos son los siguientes:
-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.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".usado en el ejemploecho
comando, esto es lo mismo que en Pythonprint
Lo 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 usargrep
Comando para ver las inclusiones instaladas en Pythonos
Paquete de campo:
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.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:
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 # 显示系统所有进程的详细信息
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命令,动态显示进程信息
pstree
: Muestra los procesos actualmente en ejecución y sus relaciones padre-hijo en forma de diagrama de árbol. pstree # 显示进程树
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 # 查找特定用户的所有进程
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 # 以较低优先级运行一个长时间运行的命令
jobs
: muestra una lista de trabajos en la sesión actual del terminal, incluidos los procesos que se ejecutan en segundo plano. jobs # 列出当前会话的后台作业
bg
yfg
:bg
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 # 将后台作业调到前台运行
kill
: envía una señal al proceso especificado, generalmente utilizada para finalizar el proceso. kill PID # 杀死指定的进程ID
Aviso,kill
El comando se envía por defecto.SIGTERM
Señal, que se puede utilizar si el proceso no responde.-9
usarSIGKILL
Signal mata con fuerza el proceso:
kill -9 PID # 强制杀死进程
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.ySIGKILL
Las 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:
nvidia-smi
nvidia-smi -l 1
Este comando actualizará la información de estado cada 1 segundo.
nvidia-smi -h
nvidia-smi pmon
nvidia-smi --id=0 --ex_pid=12345
Esto finalizará forzosamente el proceso con PID 12345 en GPU ID 0.
nvidia-smi -pm 1
nvidia-smi -i 0 -pm 1
El primer comando configurará todas las GPU en modo de rendimiento, el segundo comando solo apunta a la GPU con ID 0.
nvidia-smi --id=0 -r
Esto reiniciará la GPU con ID 0.
nvidia-smi -h
La siguiente es una introducción a la información de la GPU a través de una imagen:
Aquí hay una herramientaTMUX
,TMUX
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.Xtuner
Llevará mucho tiempo ajustar el modelo.Tmux
Puede 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:
y luego usarapt install tmux
Comando para instalar tmux. Puede usarlo una vez completada la instalación.tmux
Puede 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
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 desarrolloconda
Ordenstudio-conda
, presentaremos a continuaciónconda
Uso básico de ystudio-conda
Cómo utilizar e introducirstudio-conda
¿Cómo se logra?
Lo presentaremos en las siguientes partes:
nosotros podemos usarconda --version
para ver la máquina de desarrollo actualconda
información de versión:
cuando queremos usarconda
La 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
Pero normalmente usamospip
Instalando el paquete, lo presentaremos más adelante.pip
yconda
diferencia.
Si queremos ver la información de configuración de conda, podemos usarconda config --show
comando, si es la configuración predeterminada de la máquina de desarrollo, devolverá: (parte de la información)
Estas configuraciones están enConda
La 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.
Esta parte esconda
中非常重要的一部分,掌握了这一部分大家就可以将开发环境玩转到飞起了😀。
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.conda
bajo el directorioenvs
Encontrado en el directorio.
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:
Si queremos ver qué entornos virtuales tenemos podemos utilizar el siguiente comando:
conda env list
conda info -e
conda info --envs
Al mismo tiempo, también podemos ver el directorio donde se encuentra el entorno.
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.
Si desea salir del entorno virtual, puede utilizar:
conda activate
conda deactivate
Ambos comandos regresaránbase
ambiente porquebase
Es el entorno básico de conda. Si observa con atención,base
El directorio del entorno es de mayor nivel que otros directorios del 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
Por ejemplo lo haremosxtuner0.1.17
El entorno virtual se exporta y la información de configuración es la siguiente:
Éstas incluyennombre del entorno、La 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.
En esta parte presentamos algunosconda
ypip
Algunas diferencias:
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:
- 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.
- 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.
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:
Esostudio-conda
Es 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"
export
se utiliza para establecer variables de entorno.alias
es copiar un archivo sh en una variable. Esto se puede ejecutar en la terminal como un comando.studio-conda
Eso es todo.
aquístudio-smi
Se utiliza para comprobar el uso de la memoria virtual cuando abrimos./share/studio-smi
El 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
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:
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.sh
El 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 $@
uno de ellos*list
*()
Espera, es todostudio-conda
función, que puede implementar ciertas operaciones, por ejemplo, podemos usarstudio-conda env list
Para ver el entorno predeterminado:
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}
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.conda
Exportadoxtuner0.1.17
Archivos 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.sh
archivo, 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
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.17
Y presione Enter para restaurar el entorno virtual.
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.sh
Se 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
¡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.
rm -rf /root
, tardará unos 10 minutos en esperarln -s /share /root/share
Para pasar la misión de nivel, debes tomar capturas de pantalla en pasos clave:
detalles de la misión | Tiempo requerido para completar | |
---|---|---|
Misión | Complete la conexión SSH y el mapeo de puertos y ejecútelohello_world.py | 10 minutos |
Tarea opcional 1 | Complete los comandos básicos de Linux en la máquina de desarrollo. | 10 minutos |
Tarea opcional 2 | Utilice VSCODE para conectarse de forma remota a la máquina de desarrollo y crear un entorno conda | 10 minutos |
Tarea opcional 3 | Crear y ejecutartest.sh documento | 10 minutos |