minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Este artigo são as notas do terceiro campo de prática modelo em grande escala para acadêmicos organizado pelo Laboratório de Inteligência Artificial de Xangai. Ele é apenas para referência de indivíduos e assistentes de ensino ao corrigir o dever de casa.Link original do tutorial。
Para se registrar, pesquise "The Third Scholar Model Practice Camp" no WeChat.
Esta nota é uma nota anotada pessoalmente e modificada com base no tutorial original.
😀Hello大家好,欢迎来到Modelo acadêmico grandeAcampamento prático, aqui está um curso básico preparado pelo acampamento prático para alunos que estão participando do acampamento prático pela primeira vez e alunos de diversos setores que não possuem conhecimentos básicos de Linux.Máquina de desenvolvimento InternStudioe domine alguns princípios básicosConhecimento Linux , para que todos não tenham ideia de por onde começar nos cursos a seguir, espero que seja útil para todos. Preparamos algumas tarefas de nível para você nas tarefas de nível aqui. Ao concluir as tarefas de nível exigidas e fazer o check-in, você receberá a recompensa de poder de computação do nível atual.vamos começar!
InternStudio 是大模型时代下的云端算力平台。基于 InternLM 组织下的诸多算法库支持,为开发者提供开箱即用的大语言模型微调环境、工具、数据集,并完美兼容 🤗 HugginFace 开源生态。
Se quiser saber mais sobre o InternStudio, você pode conferir os seguintes documentos: EstagiárioEstúdio
https://studio.intern-ai.org.cn/
Primeiro abra o link acima para entrar no InternStudio. Após fazer o login, você irá automaticamente para a interface do console, conforme mostrado na figura abaixo:
Deixe-me contar as funções das páginas correspondentes a cada número de série:
O texto acima é uma breve introdução à plataforma InternStudio. Vamos dar uma olhada em como criar uma máquina de desenvolvimento. Vamos para a página inicial e clicamos em ".Crie uma máquina de desenvolvimento”
Aqui escolhemos criarmáquina de desenvolvimento pessoal, nomeadoteste,CudaA versão é 12.2,Alocação de recursosSelecione 10% e a duração padrão está correta.
Após a conclusão da criação, emMáquina de desenvolvimentoVocê pode ver a máquina de desenvolvimento que acabou de criar na interface. Clique para entrar na máquina de desenvolvimento.
Depois de entrar na máquina de desenvolvimento, você pode ver a página principal da máquina de desenvolvimento. A máquina de desenvolvimento tem três modos para escolher:JupyterLab, Terminal e VScode
em:
Apresentamos acimaPlataforma InternStudioe como criar uma máquina de desenvolvimento Nesta seção, queremos entender o que.SSH、Por que usar conexão remota, Como usar SSHconexão remotaMáquina de desenvolvimento, o que éMapeamento de portase como procederMapeamento de portas。
SSHO nome completo é Secure Shell, que é traduzido para chinês como shell seguro.protocolo de segurança de rede , realize acesso seguro e transferência de arquivos e outros serviços por meio de mecanismos de criptografia e autenticação. O protocolo SSH fornece serviços de rede seguros em um ambiente de rede inseguro, criptografando e autenticando dados de rede.
SSH é (arquitetura C/S) porservidoreclientePara estabelecer um canal SSH seguro, ambas as partes precisam primeiro estabelecer uma conexão TCP, depois negociar o número da versão e vários algoritmos usados, e gerar o mesmochave de sessão usado para criptografia simétrica subsequente. Após completar a autenticação do usuário, ambas as partes podem estabelecer uma sessão para troca de dados.
Então, na prática subsequente, iremosConfigurar chaves SSH, a chave de configuração é para que não tenhamos que digitar a senha repetidamente quando nos conectamos remotamente à máquina de desenvolvimento, entãoPor que conectar-se remotamente??
A vantagem da conexão remota é que, se você estiver usando um escritório remoto, poderá se conectar remotamente à máquina de desenvolvimento por meio de SSH, para poder desenvolver localmente. E se você precisar rodar algum código local e não tiver um ambiente, então a conexão remota é muito necessária.
Primeiro, usamos o método de inserção da senha para conexão remota SSH. Mais tarde falaremos sobre como configurar o login sem senha.
Após concluir a criação da máquina de desenvolvimento, precisamos abrir o terminal powerShell do nosso computador e usarWin+R Use a tecla de atalho para abrir a caixa de execução, digite powerShell e abra o terminal powerShell. (Se você estiver executando o sistema operacional Linux ou Mac, as etapas a seguir são as mesmas)
Voltamos à plataforma da máquina de desenvolvimento e entramosMáquina de desenvolvimentoEncontre a máquina de desenvolvimento que criamos na página e cliqueConexão SSH。
então copieComando de login, 37367 aqui é a porta SSH usada pela máquina de desenvolvimento. Geralmente, a porta 22 é usada. Sem esse número de porta, você não pode se conectar ao SSH e a porta de cada pessoa é diferente, portanto, se você estiver se conectando à máquina de desenvolvimento, se você não conseguir se conectar. , você precisa verificar se a porta está errada.
Cole o comando copiado no PowerShell e pressione Enter. Aqui precisamos inserir a senha. Copiamos a senha no comando de login e colamos no terminal.Observe que após copiar a senha, clique com o botão direito para colá-la. A tecla de atalho do shell para colar em alguns computadores é.shift+ins
, a senha colada aqui não será exibida, isso é normal.
Por fim, pressione Enter e o seguinte conteúdo aparecerá, indicando sucesso:
Depois de nos conectarmos à máquina de desenvolvimento, podemos usarhostname
Para visualizar o nome da máquina de desenvolvimento, useuname -a
Para visualizar as informações do kernel da máquina de desenvolvimento, uselsb_release -a
Para visualizar informações de versão da máquina de desenvolvimento, usenvidia-smi
Verifique as informações da GPU. Falaremos sobre esses comandos mais tarde. Se quiser sair da conexão remota, digite-o duas vezes.exit
É isso.
Mas quando desenvolvemos e estudamos, é difícil inserir a senha remotamente. Podemos definir a chave SSH para pular a etapa de digitação da senha.gerador de chaves sshcomando para gerar a chave
A chave SSH é um método de autenticação de login seguro e conveniente, usado para autenticação e comunicação criptografada no protocolo SSH.
gerador de chaves sshSuporta chaves de autenticação RSA e DSA.
Os parâmetros comumente usados incluem:
Aqui usamos o algoritmo RSA para gerar a chave, o comando é:
ssh-keygen -t rsa
Depois de inserir o comandoEntre até o fimÉ isso, a chave aqui é gerada por padrão em~/.ssh/
sob o diretório,~
Significa o diretório inicial, se for Windows, éC:Users{your_username}
.Pode ser usado no PowerShellGet-Content
Comando para visualizar a chave gerada, que pode ser utilizada caso seja um sistema operacional Linuxcat
Ordem.
Depois voltamos para a plataforma da máquina de desenvolvimento e clicamos em Configuração na página inicialChave SSH, então cliqueAdicionar chave pública SSH,
Copie a chave que você acabou de gerar e cole-a na caixa de chave pública. O nome será reconhecido automaticamente. Por fim, clique em Adicionar agora e a configuração da chave SSH estará concluída.
Após concluir a criação da chave SSH, reinicieterminalAo conectar-se remotamente, a etapa de digitação da senha será ignorada.
Claro, você também pode usar software de conexão remota SSH, como:Termo de vento, terminal X espere. Aqui usamos VScode para conexão remota. A vantagem de usar VScode é que ele é um editor de código, muito conveniente para modificação de código e outras operações.
Se quisermos nos conectar remotamente no VScode, também precisamos instalar um conjunto de plug-ins. Você pode pesquisar online como instalar o VScode. (O vscode na máquina de desenvolvimento não pode procurar este plug-in, mas o vscode local pode)
Se você instalou o VScode, pode clicar na página de extensão à esquerda e digitar “SSH” na caixa de pesquisa. O primeiro é o plug-in que queremos instalar.
Após instalar o plug-in, clique no ícone de conexão remota na barra lateral, clique no botão "+" no SSH e adicione o comando de login para a conexão SSH da máquina de desenvolvimento.
Copiamos o comando de login, colamos o comando na janela pop-up e, finalmente, pressionamos Enter:
O arquivo de configuração padrão é adequado. Claro, você também pode personalizá-lo. A seguir está o conteúdo específico do arquivo de configuração: (Isso inclui todas as informações de sua conexão 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
Se você quiser adicionar manualmente algumas das seguintes opções de configuração, será necessário modificar as partes correspondentes de acordo com o formato acima.
Se *
StrictHostKeyChecking
no
eUserKnownHostsFile
*/dev/null
Exclua a janela pop-up que aparecerá para verificação de impressão digital:
StrictHostKeyChecking no
Indica que a verificação estrita da chave do host está desabilitada. Isto significa que ao conectar-se a um novo servidor SSH, a chave de host do servidor não será rigorosamente verificada, o que pode representar um certo risco de segurança.
UserKnownHostsFile /dev/null
Ele define o arquivo de chave do host conhecido pelo usuário como /dev/null, o que essencialmente ignora a gravação e o uso de chaves de host conhecidas.No entanto, na prática geral de segurança, não é recomendado desabilitar arbitrariamente a verificação estrita da chave do host.
Em seguida, clique em “Conectar” na janela de prompt que aparece no canto inferior direito para conectar-se remotamente à máquina de desenvolvimento.
Após a conexão remota ser concluída, você pode escolher a pasta a ser aberta, que também pode ser chamada de diretório de trabalho. Você pode escolher a pasta na máquina de desenvolvimento ou a pasta local na máquina de desenvolvimento.disco de nuvem。
Na próxima vez que você fizer uma conexão remota, não precisará inserir comandos de login e outras informações. Você só precisa abrir a conexão remota do vscode para ver as informações da máquina de desenvolvimento da primeira conexão, como segue.root
Isso significa que quando nos conectamos pela primeira vez à máquina de desenvolvimento, usamos/root
Lista de trabalho.
E na foto abaixo->
Indica que você precisa selecionar novamente o diretório de trabalho após entrar na máquina de desenvolvimento:
E na foto abaixo->
Indica a entrada no diretório de trabalho selecionado pela última máquina de desenvolvimento:
O diretório de trabalho selecionado a cada vez será exibido nas informações da máquina de desenvolvimento: (há um diretório de trabalho adicional para lagent aqui)
A seguir apresentaremos quandoMapeamento de portas。
Mapeamento de portas É uma tecnologia de rede que pode mapear qualquer porta da rede externa para a porta correspondente na rede interna para realizar a comunicação entre a rede interna e a rede externa. Através do mapeamento de portas, os serviços ou aplicações na intranet podem ser acessados a partir da rede externa para alcançar uma comunicação conveniente através da rede.
Então, por que precisamos realizar o mapeamento de portas ao usar uma máquina de desenvolvimento?
Porque nos cursos subsequentes realizaremos modelosdemonstração_web Na prática de implantação, durante esse processo, é provável que você encontre o problema de carregamento incompleto da interface da web.Isso ocorre porque ao executar web_demo na máquina de desenvolvimento Web IDE, acessar diretamente o serviço http/https na máquina de desenvolvimento pode encontrar problemas de proxy.recursos da interface do usuárioNão carregado completamente.
Então, para resolver esse problema, precisamos mapear a porta da conexão executando web_demo, eLinks de rede externos são mapeados para nosso host local , usamos acesso de conexão local para resolver esse problema de proxy. Vamos praticar agora.
Vamos primeiro entender como funciona o mapeamento de portas da máquina de desenvolvimento com base em um diagrama:
Abaixo estão etapas práticas. Primeiro, entenda como realizar o mapeamento de portas.
ssh -p 37367 [email protected] -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
O acima é um comando de mapeamento de porta. Execute este comando no host para realizar o mapeamento de porta. Aqui está um fluxograma para entender o processo de mapeamento de porta:
O PC pessoal se conectará remotamente à única porta exposta 37367 da máquina de desenvolvimento (isso é mencionado durante o SSH, e a porta exposta de cada máquina de desenvolvimento é diferente) e definirá as opções de túnel. A porta exposta serve como estação de trânsito para encaminhamento de tráfego.
-C
: habilite a compactação para reduzir a quantidade de dados transferidos.-N
: Não executa comandos remotos, apenas estabelece túneis.-g
: permite que hosts remotos se conectem a portas encaminhadas localmente.Quando este comando SSH é executado em um PC pessoal, o cliente SSH escutará na porta 7860 da máquina local.
Qualquer tráfego enviado para a porta local 7860 será encaminhado pelo túnel SSH para a porta 7860 no endereço 127.0.0.1 do servidor remoto.
Isso significa que mesmo que esta porta da máquina de desenvolvimento não esteja diretamente exposta à rede externa, podemos acessar com segurança os serviços no servidor remoto através deste túnel. .
Ainda vamos para a interface da máquina de desenvolvimento, encontramos nossa máquina de desenvolvimento e clicamosServiços personalizados, copie o primeiro comando,
ssh -p 37367 [email protected] -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no
Vamos apresentar a ele o significado de cada parte do comando:
-p 37367
: especifica a porta para conexão SSH para 37367, mencionada anteriormente.[email protected]
: Indica usar root
A identidade do usuário se conecta assh.intern-ai.org.cn
este anfitrião.-CNg
:
-C
Normalmente usado para ativar a compactação.-N
Indica que os comandos remotos não são executados, mas apenas conexões são estabelecidas para encaminhamento de porta, etc.-g
Permitir que hosts remotos se conectem a portas encaminhadas localmente.-L {本地机器_PORT}:127.0.0.1:{开发机_PORT}
: Isto serve para configurar o encaminhamento de porta local para encaminhar a porta especificada da máquina local (por {本地机器_PORT}
representa) encaminhado para o host remoto (aqui, ou seja,ssh.intern-ai.org.cn
)de 127.0.0.1
(ou seja, o endereço de loopback local) e a porta da máquina de desenvolvimento especificada (definida por{开发机_PORT}
expressar).-o StrictHostKeyChecking=no
: desative a verificação estrita de chave de host para evitar avisos ou erros devido a chaves de host desconhecidas ao conectar-se pela primeira vez.Ao executar uma demonstração na web, você pode usar este comando para realizar o mapeamento de portas, por exemplo:
Criamos um arquivo hello_world.py (clique com o botão direito na interface da máquina de desenvolvimento para criar o arquivo e altere o nome para hello_world.py) e preencha o seguinte conteúdo no arquivo:
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()
Lembre-se depois de editarctrl+s
salvar
Antes de executar o código, você precisa usarpip install gradio==4.29.0
Comando para instalar os seguintes pacotes de dependência (copie e cole o comando no terminal) e, em seguida, execute um no terminal do Web IDEpython hello_world.py
Ordem
Se o mapeamento da porta não for realizado, ela não poderá ser acessada usando IP local.
Posso inserir isso no PowerShell usando o seguinte comando:
ssh -p 37367 [email protected] -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
Isso representa sucesso. (Perceber: Este comando não retorna nenhum conteúdo, o que significa que o mapeamento da porta está em execução, e então você pode ver a interface da interface web abrindo a conexão na página web)
Claro, se executarmos diferentes UIs da web, precisaremos inserir comandos repetidamente, o que é muito problemático, e precisamos usar o VScode.Conectamos a máquina de desenvolvimento remotamente via SSH. O VScode fornece mapeamento automático de portas. Não precisamos configurá-lo manualmente. Podemos usar a tecla de atalho "Ctrl+Shift+~".Acorde o terminal, as opções de porta podem ser encontradas no lado direito do terminal:
Aqui você pode visualizar as informações de mapeamento da porta. Se precisar modificar a porta, você pode modificar o número da porta na coluna da porta.
Nesta parte, vou levar você a entender um pouco do LinuxOperações básicas e use algumas ferramentas. Para que todos possam resolver sozinhos quando encontrarem problemas. Se encontrar algum problema, você também pode comentar aqui e eu responderei a tempo.
porque usamosMáquina de desenvolvimentoRaramente usadogestão de autoridade , então não vamos apresentá-lo. (As operações a seguir são todas realizadas no terminal VScode)
No Linux, as operações comuns de gerenciamento de arquivos incluem:
touch
comando cria um arquivo vazio.mkdir
Ordem.cd
Ordem.pwd
Ordem.cat
Exibir diretamente todo o conteúdo do arquivo,more
eless
Pode ser visualizado em páginas.vi
ouvim
Aguarde o editor.cp
Ordem.ln
Ordem.mv
Ordem.rm
Ordem.rmdir
(Apenas diretórios vazios podem ser excluídos) ou rm -r
(Diretórios não vazios podem ser excluídos).find
Ordem.ls
comando, como usar ls -l
Veja informações detalhadas sobre arquivos em um diretório.sed
Ordem.Aqui estão vários comandos que usaremos no curso:
Podemos usar o toque para criar arquivos rapidamente, sem precisar clicar manualmente para criá-los.Por exemplo, queremos criar umdemo.py
documento:
Da mesma forma, se você deseja criar um arquivo chamadotest
Diretório:
Este comando será o comando mais comumente usado. Antes de usá-lo, você precisa explicar a estrutura de diretórios para alunos que não possuem conhecimentos de informática e fazer um desenho para que todos possam entender:
O que estamos usando agora éroot
diretório, que também é o diretório inicial do usuário root.~
, no sistema operacional Linux/
Representa o diretório raiz. Existem muitos diretórios e arquivos exigidos pelo sistema no diretório raiz. O diretório que acabamos de criar existe.root
diretório, entre os quais.
Representa o diretório atual,..
O diretório pai representado.Se eu entrasse agoratest
diretório e depois retornar pararoot
Diretório, podemos fazer isso:
podemos usarpwd
Comando para visualizar o diretório atual: Isso torna mais fácil determinar em qual diretório estamos atualmente.
cat
O comando pode visualizar o conteúdo do arquivo e mais comandos podem ser usados--help
Comando para visualizar:
Podemos usá-lo quando precisarmos editar arquivosvi
ouvim
comando, quando você entra na edição de arquivo, existem três modos:
Entre no modo de edição para usari
, a conveniência do vim é que você pode fazer modificações simples em arquivos no terminal.
**cp
**O comando será usado com frequência nos seguintes cursos. Ele é usado para copiar um arquivo ou diretório para outro diretório. Os usos comuns incluem:
cp 源文件 目标文件
cp -r 源目录 目标目录
Mas se quisermos usar o modelo, esta operação ocupará muito espaço em disco, por isso geralmente usamosln
comando, é igual ao atalho do Windows. Existem dois tipos de links no Linux:link físico(link físico) comlink virtual (link simbólico), um link físico significa que um arquivo pode ter vários nomes, enquanto um link simbólico gera um arquivo especial cujo conteúdo aponta para a localização de outro arquivo. Os links físicos existem no mesmo sistema de arquivos, mas os links físicos podem abranger sistemas de arquivos diferentes.
Portanto, geralmente usamos conexões suaves. Seus métodos de uso comuns são os seguintes:
ln [参数][源文件或目录][目标文件或目录]
Os parâmetros são os seguintes:
mv
comando erm
Os comandos são usados de maneira semelhante, masmv
Ele é usado para mover arquivos ou diretórios e também pode ser renomeado.rm
O comando é usado para excluir arquivos ou diretórios.
Os métodos comumente usados são os seguintes:
Parâmetros comumente usados:
-i
: Modo interativo, pergunte antes de substituir.-f
: Forçar cobertura.-u
: mova apenas se o arquivo de origem for mais recente que o arquivo de destino.Exemplo de uso:
mv file1.txt dir1/
: mova o arquivo file1.txt
Mover para o diretóriodir1
meio.
mv file1.txt file2.txt
: mova o arquivo file1.txt
Renomear parafile2.txt
。
comando rm:
Parâmetros comumente usados:
-i
: Modo interativo, pergunte antes de excluir.-f
: exclusão forçada, ignorando arquivos inexistentes, sem solicitar confirmação.-r
:Exclui recursivamente um diretório e seu conteúdo.Exemplo de uso:
rm file.txt
:Deletar arquivos file.txt
。rm -r dir1/
: Excluir diretórios recursivamente dir1
e todo o seu conteúdo.O comando para excluir um diretório também pode ser usadormdir
。
find
O comando é uma ferramenta poderosa de pesquisa de arquivos no sistema Linux. Ele pode encontrar arquivos ou diretórios que atendam às condições no diretório especificado e seus subdiretórios e executar as operações correspondentes.
A seguirfind
Alguns usos comuns do comando:
-name
opção para localizar arquivos por nome de arquivo. Por exemplo,find /path/to/directory -name "file.txt"
irá pesquisar o diretório especificado e seus subdiretórios nomeadosfile.txt
documento.-type
opção para localizar arquivos por tipo de arquivo. Por exemplo,find /path/to/directory -type f
Todos os arquivos comuns no diretório especificado e seus subdiretórios serão encontrados.-size
opção para localizar arquivos por tamanho de arquivo. Por exemplo,find /path/to/directory -size +100M
Encontrará arquivos maiores que 100 MB no diretório especificado e em seus subdiretórios.-mtime
、-atime
ou-ctime
As opções encontram arquivos com base na hora de modificação, hora de acesso ou hora de mudança de status. Por exemplo,find /path/to/directory -mtime -7
Encontrará arquivos no diretório especificado e seus subdiretórios que foram modificados em 7 dias.-perm
opção para localizar arquivos com base nas permissões de arquivo. Por exemplo,find /path/to/directory -perm 755
Encontrará arquivos com permissão 755 no diretório especificado e seus subdiretórios.-user
ou-group
As opções encontram arquivos por proprietário ou grupo. Por exemplo,find /path/to/directory -user username
Irá pesquisar o diretório especificado e seus subdiretórios pertencentes ao usuáriousername
documento.-exec
As opções podem realizar operações correspondentes nos arquivos encontrados. Por exemplo,find /path/to/directory -name "*.txt" -exec rm {} ;
excluirá todos os encontrados terminando com.txt
arquivo no final.ls
O comando pode ser usado para listar o conteúdo de um diretório, bem comodetalhes。
Os parâmetros e métodos de uso comumente usados são os seguintes:
-a
: Exibe todos os arquivos e diretórios, incluindo arquivos ocultos (além.
arquivo ou diretório que começa com .).-l
: Exibe informações detalhadas em formato longo, incluindo permissões de arquivo, proprietário, tamanho, hora da modificação, etc.-h
:e-l
Usado em combinação para exibir o tamanho do arquivo de maneira legível (por exemplo,K
、M
、G
espere).-R
: lista o conteúdo dos subdiretórios recursivamente.-t
: Exibe na ordem do horário de modificação do arquivo. ,sed
Command é um editor de fluxo, usado principalmente para processamento de texto. É frequentemente usado no processamento de operações complexas de arquivos.sed
Os parâmetros comumente usados e exemplos de uso de comandos são os seguintes:
-e<script>
ou--expression=<script>
: especifique scripts diretamente na linha de comando para processamento de texto.-f<script文件>
ou--file=<script文件>
: leia o script do arquivo de script especificado para processamento de texto.-n
ou--quiet
ou--silent
: imprima apenas os resultados de saída processados pelo script e não imprima linhas sem correspondência.a
: adicione a sequência de texto especificada à próxima linha da linha atual.c
: substitui o intervalo de linhas especificado pela sequência de texto especificada.d
: Exclua a linha especificada.i
: adicione a sequência de texto especificada à linha anterior da linha atual.p
: Imprima as linhas selecionadas.geralmente com-n
Usado junto com os parâmetros, apenas as linhas correspondentes são impressas.s
: use expressões regulares para substituição de texto. Por exemplo,s/old/new/g
Substitua todos os "InternLM" por "InternLM yyds".usado no exemploecho
comando, é o mesmo que em pythonprint
O mesmo, usado para imprimir conteúdo, aqui use a barra vertical>
Imprimir InternLM em um arquivo Os caracteres de pipe comumente usados incluem.<
e|
, por exemplo podemos usargrep
Comando para visualizar as inclusões instaladas em pythonos
Pacote de campo:
grep
É uma poderosa ferramenta de pesquisa de texto. Os parâmetros comumente usados são os seguintes:
-i
: Pesquise independentemente do caso.-v
: Inverte a correspondência, ou seja, exibe linhas sem correspondência.-n
: Exibe o número da linha.-c
: conte o número de linhas correspondentes.Gerenciamento de processosOs comandos são ferramentas importantes para monitoramento do sistema e gerenciamento de processos. Os comandos de gerenciamento de processos comumente usados incluem o seguinte:
Também existe um comando especial na máquina de desenvolvimentonvidia-smi
, que é uma ferramenta de linha de comando para a interface de gerenciamento de sistema NVIDIA, usada para monitorar e gerenciar dispositivos GPU NVIDIA. Ele fornece uma maneira rápida de visualizar informações como status da GPU, uso, temperatura, uso de memória, uso de energia e processos em execução na GPU.
A seguir estão exemplos de uso de cada comando:
ps
: Liste os processos no sistema atual. Diferentes informações do processo podem ser exibidas usando diferentes opções, como:ps aux # 显示系统所有进程的详细信息
top
: exibe dinamicamente o status dos processos no sistema. Ele atualiza a lista de processos em tempo real, mostrando os processos com maior uso de CPU e memória.top # 启动top命令,动态显示进程信息
pstree
: exibe os processos atualmente em execução e seus relacionamentos pai-filho na forma de um diagrama de árvore. pstree # 显示进程树
pgrep
: Encontre processos que correspondam aos critérios. Você pode pesquisar processos com base no nome do processo, usuário e outras condições.pgrep -u username # 查找特定用户的所有进程
nice
: Altere a prioridade de um processo.nice
Quanto menor o valor, maior a prioridade do processo.nice -n 10 long-running-command # 以较低优先级运行一个长时间运行的命令
jobs
: exibe uma lista de trabalhos na sessão de terminal atual, incluindo processos em execução em segundo plano. jobs # 列出当前会话的后台作业
bg
efg
:bg
Coloque o processo suspenso para ser executado em segundo plano,fg
Traga o processo em segundo plano de volta para o primeiro plano.bg # 将最近一个挂起的作业放到后台运行
fg # 将后台作业调到前台运行
kill
: envia um sinal para o processo especificado, geralmente usado para encerrar o processo. kill PID # 杀死指定的进程ID
Perceber,kill
O comando é enviado por padrãoSIGTERM
Sinal, que pode ser usado se o processo não estiver respondendo-9
usarSIGKILL
O sinal mata o processo à força:
kill -9 PID # 强制杀死进程
SIGTERM
O sinal (Signal Termination) é um sinal padrão usado em sistemas operacionais Unix e semelhantes ao Unix para solicitar o encerramento do processo. Esse sinal geralmente é enviado quando o sistema ou usuário deseja encerrar um processo normalmente.eSIGKILL
Os sinais são diferentes,SIGTERM
Os sinais podem ser capturados e manipulados por um processo, permitindo que o processo seja limpo antes de sair. (da internet)
A seguir nvidia-smi
Alguns usos básicos de comandos:
nvidia-smi
nvidia-smi -l 1
Este comando atualizará as informações de status a cada 1 segundo.
nvidia-smi -h
nvidia-smi pmon
nvidia-smi --id=0 --ex_pid=12345
Isso encerrará à força o processo com PID 12345 no GPU ID 0.
nvidia-smi -pm 1
nvidia-smi -i 0 -pm 1
O primeiro comando definirá todas as GPUs para o modo de desempenho, o segundo comando terá como alvo apenas a GPU com ID 0.
nvidia-smi --id=0 -r
Isso reiniciará a GPU com ID 0.
nvidia-smi -h
A seguir está uma introdução às informações da GPU por meio de uma imagem:
Aqui está uma ferramentaTMUX
,TMUX
é um multiplexador de terminal. Torna mais fácil alternar entre vários terminais, desconectá-los (isso não mata os terminais, eles continuam funcionando em segundo plano) e reconectá-los a outros terminais. Por que introduzir esta ferramenta?Porque isso será feito mais tardeXtuner
Ao ajustar o modelo, levará muito tempo para usá-lo.Tmux
Pode resolver a situação em que o programa é encerrado e interrompido. Veja como instalá-lo e usá-lo.
Como a máquina de desenvolvimento usa o sistema operacional Ubuntu, você pode usarlsb_release -a
Comando para visualizar informações do sistema Ubuntu:
e então useapt install tmux
Comando para instalar o tmux Você pode usá-lo após a conclusão da instalação.tmux
Você pode usar o tmux com o comando. Se quiser sair do tmux, você pode usar ".Ctrl+d"tecla de atalho.
Na máquina de desenvolvimento, apenas os arquivos no caminho /root são armazenados de forma persistente. O software instalado em outros caminhos será redefinido após a reinicialização.
Métodos de uso específicos podem ser visualizados em:
https://www.ruanyifeng.com/blog/2019/10/tmux.html
Conda é um sistema de gerenciamento de pacotes e ambiente de código aberto que roda em Windows, macOS e Linux. Ele instala, executa e atualiza rapidamente pacotes de software e suas dependências. Usando o Conda você pode facilmente criar, salvar, carregar e alternar diferentes ambientes em sua máquina local.
Já instalado na máquina de desenvolvimentoconda
, podemos usá-lo diretamente, e também há um integrado na máquina de desenvolvimentoconda
Ordemstudio-conda
, apresentaremos abaixoconda
Uso básico estudio-conda
Como usar e apresentarstudio-conda
Como isso é alcançado.
Iremos apresentá-lo nas seguintes partes:
podemos usarconda --version
para visualizar a máquina de desenvolvimento atualconda
versão informação:
quando queremos usarconda
Será muito lento ao instalar o pacote. Podemos configurar o espelhamento doméstico para melhorar a velocidade de instalação.
#设置清华镜像
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
Mas geralmente usamospip
Instalando o pacote, iremos apresentá-lo mais tardepip
econda
diferença.
Se quisermos visualizar as informações de configuração do conda, podemos usarconda config --show
comando, se for a configuração padrão da máquina de desenvolvimento, ele retornará: (parte da informação)
Essas configurações estão emConda
A configuração do ambiente afetará os métodos e resultados da instalação de pacotes de software, atualizações, gerenciamento de ambiente e outras operações.
Esta parte éconda
中非常重要的一部分,掌握了这一部分大家就可以将开发环境玩转到飞起了😀。
podemos usarconda create -n name python``=3.10
Crie um ambiente virtual, o que significa que um ambiente virtual com Python versão 3.10 e nome será criado.Após a criação, você pode.conda
sob o diretórioenvs
Encontrado no diretório.
Quando a versão do python não for especificada, um ambiente virtual baseado na versão mais recente do python será criado automaticamente. Ao mesmo tempo, podemos instalar os pacotes necessários durante a criação do ambiente virtual:conda create -n name numpy matplotlib python=3.10
(Mas eu não recomendo que você use desta forma)
Os parâmetros comuns para a criação de um ambiente virtual são os seguintes:
Se quisermos ver quais ambientes virtuais temos, podemos usar o seguinte comando:
conda env list
conda info -e
conda info --envs
Ao mesmo tempo, também podemos ver o diretório onde o ambiente está localizado.
Depois de criarmos o ambiente virtual podemos usarconda activate name
comando para ativar o ambiente virtual, como verificar se a troca foi bem-sucedida?É fácil, basta olhar(base)
Se se torna o nome do ambiente virtual criado.
Se quiser sair do ambiente virtual, você pode usar:
conda activate
conda deactivate
Ambos os comandos retornarãobase
ambiente porquebase
É o ambiente básico do conda. Se você observar com atenção,base
O diretório de ambiente é de nível superior a outros diretórios de ambiente virtual.
Se quiser excluir um ambiente virtual, você pode usarconda remove --name name --all
, se você excluir apenas um ou alguns pacotes no ambiente virtual, poderá usarconda remove --name name package_name
A exportação de um ambiente virtual é muito necessária para um ambiente específico, porque as dependências de alguns pacotes de software são muito complexas e será difícil recriá-lo e configurá-lo você mesmo. Se exportarmos o ambiente configurado, poderemos restaurá-lo na próxima vez. e você também pode compartilhar a configuração com outras pessoas.
#获得环境中的所有配置
conda env export --name myenv > myenv.yml
#重新还原环境
conda env create -f myenv.yml
Por exemplo vamosxtuner0.1.17
O ambiente virtual é exportado e as informações de configuração são as seguintes:
Esses incluemnome do ambiente、A localização do repositório online para pacotes de ambiente virtualeDependências do ambiente virtual . Posteriormente usaremos métodos de uso avançados para restaurar rapidamente o ambiente virtual.
Nesta parte apresentamos algunsconda
epip
Algumas diferenças:
Roda É um formato de pacote de instalação do Python.
É um formato de distribuição binária pré-compilado, semelhante aos binários compilados em conda.
As principais vantagens do formato Roda incluem:
- Instalação rápida: Por ser pré-compilado, não há necessidade de passar pelo processo de compilação como instalação do código-fonte durante a instalação, economizando tempo.
- Consistência: Garante que os resultados da instalação sejam consistentes em diferentes sistemas e ambientes.
Por exemplo, se você deseja instalar uma grande biblioteca Python, usar o formato Wheel pode evitar problemas de instalação causados por diferenças nos ambientes de compilação em máquinas diferentes. Além disso, para aqueles sistemas que não possuem um ambiente de compilação ou possuem recursos de compilação fracos, o formato Wheel pode tornar o processo de instalação mais suave.
Essa parte é uma parte estendida, porque acho essa parte muito interessante e muito prática, então se você tiver interesse pode aprender.
Vamos primeiro apresentarstudio-conda
, que é um comando integrado da máquina de desenvolvimento e é implementado por meio de um script Shell. O que é um script Shell?
Script de shell Um arquivo de texto contendo uma série de comandos organizados em uma ordem específica para automatizar tarefas em um ambiente Unix/Linux ou sistema operacional semelhante.
Os scripts Shell são geralmente escritos na linguagem Shell. Linguagens Shell comuns, como Bash, Sh, etc. são os comandos básicos do Linux que apresentamos anteriormente, que pertencem à linguagem Shell.
Possui os seguintes recursos importantes:
Questudio-conda
Faz parte da automação. O arquivo de configuração do ambiente bash do usuário root em nossa máquina de desenvolvimento é..bashrc
, mas na verdade o arquivo de configuração principal é/share/.aide/config/bashrc
, existem alguns comandos escritos neste arquivo que nos permitem realizar algumas operações de forma mais rápida, como:
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
é usado para definir variáveis de ambiente.alias
é copiar um arquivo sh em uma variável. Isso pode ser executado no terminal como um comando.studio-conda
É isso.
aquistudio-smi
É usado para verificar o uso da memória virtual quando abrimos./share/studio-smi
O arquivo pode ser visto:
#!/bin/bash
if command -v vgpu-smi &> /dev/null
then
echo "Running studio-smi by vgpu-smi"
vgpu-smi
else
echo "Running studio-smi by nvidia-smi"
nvidia-smi
fi
Este script é usado para verificar se existe um vgpu-smi
comando, se presente, ele será executadovgpu-smi
para exibir informações de status de uma GPU virtual (vGPU, se não estiver presente, ela será executada);nvidia-smi
para exibir informações de status da GPU NVIDIA. Como mostrado abaixo:
nvidia-smi
é uma ferramenta para monitorar e gerenciar dispositivos físicos de GPU NVIDIA, evgpu-smi
Projetado para monitorar e gerenciar recursos de GPU virtualizados por meio da tecnologia NVIDIA vGPU.
nós vemos/share/install_conda_env.sh
O conteúdo do arquivo é o seguinte:
#!/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 $@
um deles*list
*()
Espere, é tudostudio-conda
função, que pode implementar certas operações, por exemplo, podemos usarstudio-conda env list
Para visualizar o ambiente padrão:
em*clone
*()
A principal função da função é copiar o ambiente, mas ela só pode ser copiada do ambiente padrão. O código principal é na verdade:
tar --skip-old-files -xzvf /share/pkgs.tar.gz -C ${CONDA_HOME}
conda create -n $target --clone ${SHARE_CONDA_HOME}/${source}
Descompacte o pacote compactado do ambiente predefinido e, em seguida, crie um ambiente virtual por meio do clone. No entanto, alguma lógica também é definida no script Shell, mas é apenas um julgamento. Se você estiver familiarizado com qualquer linguagem de programação, deverá ser capaz. para entendê-lo. Se você não consegue entendê-lo, também não é um grande problema.
Então, como adicionamos nosso próprio ambiente criado aostudio-conda
E quanto ao meio?
A primeira etapa é criar um novo ambiente conda em /share/conda_envs
conda criar -p /share/conda_envs/xxx python=3.1x
A segunda etapa é copiar os arquivos em /root/.conda/pkgs na máquina local para /share/pkgs, recompactá-los e substituí-los (esta etapa é armazenar os grandes pacotes públicos durante o processo de criação do conda para evitar downloads repetidos)
cp -r -n /root/.conda/pkgs/* /share/pkgs/
cd /share && tar -zcvf pacotes.tar.gz pacotes
A terceira etapa é atualizar a função de lista em install_conda_env.sh e adicionar uma nova descrição do ambiente conda.
O método acima é o método fornecido pela máquina de desenvolvimento por padrão. Na verdade, existe outro método que usamos anteriormente.conda
Exportadoxtuner0.1.17
Arquivos de configuração para ambientes virtuais, podemos usarconda env create -f xtuner0.1.17.yml
comando para restaurar o ambiente virtual.Vamos escrever um script Shell simples para implementar esta operação: Criamostest.sh
arquivo, escreva o seguinte conteúdo:
#!/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
Depois de concluirmos a criação do script Shell, precisamos conceder permissões ao script. Você pode usar o comando:chmod +x test.sh
e digite./test.sh restore xtuner0.1.17
E pressione Enter para restaurar o ambiente virtual.
No entanto, isso não é muito diferente do uso direto. Se esta operação for comparada com a operação na máquina de desenvolvimento,studio-conda
Combinar comandos será muito conveniente, mas os métodos de cópia do ambiente são diferentes.Portanto, se você quiser implementá-lo, você precisa/share/install_conda_env.sh
A lógica do arquivo é modificada.
Ok, esse é todo o conteúdo deste nível. Espero que o conteúdo acima seja útil para todos no futuro. Se você quiser aprender mais sobre Linux, pode ler o artigo do meu blog. , será útil aprendermos que modelos grandes não têm muito impacto, mas se você aprender bem o Linux, seu aprendizado de modelos grandes será muito tranquilo. Finalmente, não se esqueça de completar os níveis que definimos anteriormente!
Link do blog:Linux-Linux
Execute com cuidado! ! ! !Todos os dados serão perdidos. Isto está disponível apenas na plataforma InternStudio. Não faça isso em sua própria máquina.
rm -rf /root
, levará cerca de 10 minutos para esperarln -s /share /root/share
Para passar na missão de nível, você precisa fazer capturas de tela nas principais etapas:
detalhes da missão | Tempo necessário para concluir | |
---|---|---|
Missão | Conclua a conexão SSH e o mapeamento de portas e executehello_world.py | 10 minutos |
Tarefa opcional 1 | Conclua os comandos básicos do Linux na máquina de desenvolvimento | 10 minutos |
Tarefa opcional 2 | Use VSCODE para conectar-se remotamente à máquina de desenvolvimento e criar um ambiente conda | 10 minutos |
Tarefa opcional 3 | Criar e executartest.sh documento | 10 minutos |