Berbagi teknologi

Tingkat 1: Pengetahuan dasar tentang Linux

2024-07-12

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

Kata pengantar

Artikel ini adalah catatan dari kamp latihan model skala besar ketiga untuk para sarjana yang diselenggarakan oleh Laboratorium Kecerdasan Buatan Shanghai. Artikel ini hanya untuk referensi oleh individu dan asisten pengajar saat mengoreksi pekerjaan rumah.Tautan tutorial asli
Untuk mendaftar, silakan cari "Kamp Latihan Model Cendekia Ketiga" di WeChat.
Catatan ini adalah catatan beranotasi pribadi yang dimodifikasi berdasarkan tutorial asli.

Tingkat Linux+InternStudio

😀Hello大家好,欢迎来到Model sarjana besarPerkemahan praktik, berikut adalah kursus dasar yang disiapkan oleh perkemahan praktik untuk siswa yang baru pertama kali mengikuti kamp praktik, dan siswa dari berbagai industri yang belum memiliki pengetahuan dasar tentang LinuxMesin pengembangan InternStudio, dan kuasai beberapa dasar-dasarnyaPengetahuan Linux , sehingga semua orang tidak bingung harus mulai dari mana dalam kursus berikut ini. Kami telah menyiapkan beberapa tugas level untuk Anda dalam tugas level di sini. Saat Anda menyelesaikan tugas level yang diperlukan dan check in, Anda akan menerima hadiah daya komputasi pada level saat ini.Ayo mulai!

1. Pengenalan mesin pengembangan InternStudio

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

Jika Anda ingin tahu lebih banyak tentang InternStudio, Anda dapat memeriksa dokumen berikut: StudioMagang

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

Pertama buka link di atas untuk masuk ke InternStudio. Setelah login, Anda akan otomatis melompat ke antarmuka konsol, seperti yang ditunjukkan pada gambar di bawah ini:

Masukkan deskripsi gambar di sini

Izinkan saya memberi tahu Anda fungsi halaman yang terkait dengan setiap nomor seri:

  1. Di sini Anda dapat membuatMesin pengembangan, serta mengubah konfigurasi mesin pengembangan dan melihat log terkait, dll.

Masukkan deskripsi gambar di sini

  1. Oke di siniVisualisasi Melihat file dan folder di mesin pengembangan. Jika Anda membuat dua mesin pengembangan, keduanya menggunakan disk cloud yang sama. (Karena setiap mesin pengembangan adalah kontainer Docker, satu disk cloud penyimpanan dipasang. Untuk penjelasan istilah profesional, silakan lihat: Penjelasan istilah profesional) Di sini Anda dapat mengunggah file atau folder, membuat file, dan melihat file tersembunyi.

Masukkan deskripsi gambar di sini

  1. Ini adalah fungsi baru dari mesin pengembangan. Jika Anda ingin mengerjakan suatu proyek, Anda dapat meminta sumber daya dari asistenSumber daya komputasi bersama,避免造成资源浪费。(毕竟烧的可都是💴啊)
  2. Ini digunakan untuk mengkonfigurasikunci SSH, kita akan membicarakan cara menggunakannya nanti.
  3. Tempat terakhir adalah untuk mengedit informasi pribadi Anda dan memeriksaMenghitung sumber dayapenggunaan tertentu.

Di atas adalah pengenalan singkat tentang platform InternStudio. Mari kita lihat cara membuat mesin pengembangan.Buat mesin pengembangan

Masukkan deskripsi gambar di sini

Di sini kita memilih untuk membuatmesin pengembangan pribadi, bernamatesIkan kodVersinya adalah 12.2,Alokasi sumber dayaPilih 10% dan durasi default baik-baik saja.

Setelah pembuatan selesai, masukMesin pengembanganAnda dapat melihat mesin pengembangan yang baru saja Anda buat di antarmuka.

Masukkan deskripsi gambar di sini

Setelah memasuki mesin pengembangan, Anda dapat melihat halaman utama mesin pengembangan. Mesin pengembangan memiliki tiga mode untuk dipilih:JupyterLab, Terminal dan VScode

Masukkan deskripsi gambar di sini

di dalam:

  1. Laboratorium Jupyter: Lingkungan pemrograman dan pengajaran interaktif dengan terminal internal yang dapat dengan mudah melihat file, mengeksekusi kode, dll.
  2. terminal(Terminal, paling ringan): Terutama digunakan untuk operasi baris perintah, atau menjalankan skrip dan program sederhana
  3. Kode VSC: VSCode yang terintegrasi dalam halaman web juga dapat dikembangkan dari jarak jauh melalui koneksi SSH di VSCode lokal. Berikut ini akan dijelaskan cara mengkonfigurasi koneksi jarak jauh.

Masukkan deskripsi gambar di sini

  1. Ini adalah penggunaan sumber daya, yang akan digunakan dalam kursus berikutnya.

2. SSH dan pemetaan port

Kami memperkenalkan di atasPlatform MagangStudio, dan cara membuat mesin pengembanganSSHMengapa menggunakan koneksi jarak jauh, Cara menggunakan SSHkoneksi jarak jauhMesin pengembangan, apa adanyaPemetaan Pelabuhandan bagaimana melanjutkannyaPemetaan Pelabuhan

2.1 Apa itu SSH?

SSHNama lengkapnya adalah Secure Shell, yang diterjemahkan ke dalam bahasa Cina sebagai shell amanprotokol keamanan jaringan , mewujudkan akses aman dan transfer file serta layanan lainnya melalui mekanisme enkripsi dan otentikasi. Protokol SSH menyediakan layanan jaringan yang aman di lingkungan jaringan yang tidak aman dengan mengenkripsi dan mengautentikasi data jaringan.

SSH adalah (arsitektur C/S) olehserverDanklienUntuk membuat saluran SSH yang aman, kedua belah pihak perlu membuat koneksi TCP terlebih dahulu, kemudian menegosiasikan nomor versi dan berbagai algoritme yang digunakan, dan menghasilkan saluran yang sama.kunci sesi digunakan untuk enkripsi simetris berikutnya. Setelah menyelesaikan otentikasi pengguna, kedua belah pihak dapat membuat sesi untuk pertukaran data.

Kemudian pada latihan selanjutnya kita akan melakukannyaKonfigurasikan kunci SSH, kunci konfigurasinya adalah agar kita tidak perlu memasukkan kata sandi berulang kali saat kita terhubung ke mesin pengembangan dari jarak jauh, laluMengapa terhubung dari jarak jauh?

Keuntungan koneksi jarak jauh adalah jika Anda menggunakan kantor jarak jauh, Anda dapat terhubung dari jarak jauh ke mesin pengembangan melalui SSH, sehingga Anda dapat mengembangkannya secara lokal. Dan jika Anda perlu menjalankan beberapa kode lokal dan tidak memiliki lingkungan, maka koneksi jarak jauh sangat diperlukan.

2.2 Bagaimana cara menggunakan SSH untuk terhubung dari jarak jauh ke mesin pengembangan?

2.2.1 Gunakan kata sandi untuk koneksi jarak jauh SSH

Pertama, kita menggunakan metode memasukkan kata sandi untuk koneksi jarak jauh SSH. Nanti kita akan membahas tentang cara mengkonfigurasi login tanpa kata sandi.

Setelah menyelesaikan pembuatan mesin pengembangan, kita perlu membuka terminal PowerShell komputer kita dan menggunakannyaMenangkan+R Gunakan tombol pintasan untuk membuka kotak run, masuk ke powerShell, dan buka terminal powerShell. (Jika Anda menjalankan sistem operasi Linux atau Mac, langkah-langkah berikut ini sama)

Kami kembali ke platform mesin pengembangan dan masukMesin pengembanganTemukan mesin pengembangan yang kami buat di halaman dan klikkoneksi SSH

Masukkan deskripsi gambar di sini

Masukkan deskripsi gambar di sini

lalu salinPerintah masuk, 37367 di sini adalah port SSH yang digunakan oleh mesin pengembangan. Umumnya yang digunakan adalah port 22. Tanpa nomor port ini, Anda tidak dapat terhubung ke SSH, dan port setiap orang berbeda, jadi jika Anda terhubung ke mesin pengembangan Jika Anda tidak dapat terhubung , Anda perlu memeriksa apakah portnya salah.

Rekatkan perintah yang disalin ke PowerShell dan tekan Enter. Di sini kita perlu memasukkan kata sandi. Kami menyalin kata sandi di bawah perintah login dan menempelkannya ke terminal.Perhatikan bahwa setelah menyalin kata sandi, klik kanan untuk menempelkannya. Tombol pintasan shell untuk menempelkannya di beberapa komputer adalahshift+ins, kata sandi yang ditempel di sini tidak akan ditampilkan, ini normal.

Terakhir, tekan Enter dan muncul konten berikut yang menandakan keberhasilan:

Masukkan deskripsi gambar di sini

Masukkan deskripsi gambar di sini

Setelah kita terhubung ke mesin pengembangan, kita bisa menggunakannyahostnameUntuk melihat nama mesin pengembangan, gunakanuname -aUntuk melihat informasi kernel mesin pengembangan, gunakanlsb_release -aUntuk melihat informasi versi mesin pengembangan, gunakannvidia-smiPeriksa informasi GPU. Kita akan membicarakan perintah ini nanti. Jika Anda ingin keluar dari koneksi jarak jauh, masukkan dua kali.exitItu dia.

2.2.2 Konfigurasikan kunci SSH untuk koneksi jarak jauh SSH

Namun ketika kita mengembangkan dan mempelajarinya, merepotkan untuk memasukkan password setiap saat dari jarak jauh. Kita dapat mengatur kunci SSH untuk melewati langkah memasukkan kata sandi, yang dapat kita gunakankunci sshperintah untuk menghasilkan kunci

Kunci SSH adalah metode otentikasi login yang aman dan nyaman, digunakan untuk otentikasi dan komunikasi terenkripsi dalam protokol SSH.

kunci sshMendukung kunci otentikasi RSA dan DSA.

Parameter yang umum digunakan meliputi:

  • -t: Tentukan jenis kunci, seperti dsa, ecdsa, ed25519, rsa.
  • -b: Tentukan panjang kunci.
  • -C: Tambahkan komentar.
  • -f: Tentukan nama file untuk menyimpan kunci.
  • -i: Membaca file kunci pribadi/publik yang tidak terenkripsi dan kompatibel dengan ssh-v2.

Disini kita menggunakan algoritma RSA untuk menghasilkan kunci, perintahnya adalah:

ssh-keygen -t rsa
  • 1

Setelah memasukkan perintahMasuk sepenuhnyaItu saja, kunci di sini dibuat secara default di~/.ssh/di bawah direktori,~Artinya direktori home, kalau windows yaC:Users{your_username} .Dapat digunakan di PowerShellGet-ContentPerintah untuk melihat kunci yang dihasilkan, yang dapat digunakan jika itu adalah sistem operasi LinuxcatMemesan.

Masukkan deskripsi gambar di sini

Masukkan deskripsi gambar di sini

Kemudian kita kembali ke platform mesin pengembangan dan klik Konfigurasi di halaman berandaKunci SSH, lalu klikTambahkan kunci publik SSH

Masukkan deskripsi gambar di sini

Masukkan deskripsi gambar di sini

Salin kunci yang baru saja Anda buat dan tempel ke kotak kunci publik. Nama akan dikenali secara otomatis. Terakhir, klik Tambahkan Sekarang, dan konfigurasi Kunci SSH selesai.

Masukkan deskripsi gambar di sini

Setelah menyelesaikan pembuatan SSH Key, restartterminalSaat menghubungkan dari jarak jauh, langkah memasukkan kata sandi akan dilewati.

2.2.3 Gunakan VScode untuk koneksi jarak jauh SSH

Tentunya Anda juga dapat menggunakan software koneksi jarak jauh SSH, seperti:Istilah Angin、Xterminal Tunggu. Di sini kita menggunakan VScode untuk koneksi jarak jauh. Keuntungan menggunakan VScode adalah editor kode, yang sangat nyaman untuk modifikasi kode dan operasi lainnya.

Jika kita ingin terhubung dari jarak jauh di VScode, kita juga perlu menginstal satu set plug-in. Anda dapat mencari secara online cara menginstal VScode. (Vscode di mesin pengembangan tidak dapat mencari plugin ini, tetapi vscode lokal bisa)

Masukkan deskripsi gambar di sini

Jika Anda sudah menginstal VScode, Anda dapat mengklik halaman ekstensi di sebelah kiri dan memasukkan "SSH" di kotak pencarian. Yang pertama adalah plug-in yang ingin kita instal.

Masukkan deskripsi gambar di sini

Setelah menginstal plug-in, klik ikon koneksi jarak jauh di sidebar, klik tombol "+" di SSH, dan tambahkan perintah login untuk koneksi SSH mesin pengembangan.

Masukkan deskripsi gambar di sini

Kami menyalin perintah login, lalu menempelkan perintah tersebut ke jendela pop-up, dan terakhir tekan Enter:

Masukkan deskripsi gambar di sini

Masukkan deskripsi gambar di sini

File konfigurasi default baik-baik saja. Tentu saja, Anda juga dapat menyesuaikannya. Berikut ini adalah konten spesifik dari file konfigurasi: (Ini mencakup semua informasi koneksi jarak jauh Anda)

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

Jika Anda ingin menambahkan beberapa opsi konfigurasi berikut secara manual, Anda perlu memodifikasi bagian terkait sesuai dengan format di atas.

Jika *StrictHostKeyChecking noDanUserKnownHostsFile* /dev/nullHapus jendela pop-up yang akan muncul untuk verifikasi sidik jari:

Masukkan deskripsi gambar di sini

StrictHostKeyChecking no Menunjukkan bahwa pemeriksaan kunci host yang ketat dinonaktifkan. Artinya, saat menyambung ke server SSH baru, kunci host server tidak akan diverifikasi secara ketat, sehingga dapat menimbulkan risiko keamanan tertentu.

UserKnownHostsFile /dev/nullIni menyetel file kunci host yang diketahui pengguna ke /dev/null, yang pada dasarnya mengabaikan pencatatan dan penggunaan kunci host yang dikenal.

Namun, dalam praktik keamanan umum, tidak disarankan untuk menonaktifkan pemeriksaan kunci host yang ketat secara sewenang-wenang.

Kemudian klik "Hubungkan" di jendela prompt yang muncul di sudut kanan bawah untuk terhubung dari jarak jauh ke mesin pengembangan.

Masukkan deskripsi gambar di sini

Masukkan deskripsi gambar di sini

Setelah koneksi jarak jauh selesai, Anda dapat memilih folder yang akan dibuka, yang juga dapat disebut direktori kerja. Anda dapat memilih folder di mesin pengembangan atau folder lokal.disk awan

Saat Anda membuat koneksi jarak jauh di lain waktu, Anda tidak perlu memasukkan perintah login dan informasi lainnya. Anda hanya perlu membuka koneksi jarak jauh vscode untuk melihat informasi mesin pengembangan koneksi pertama, sebagai berikutrootArtinya saat pertama kali kita terhubung ke mesin pengembangan, kita menggunakan/rootDaftar pekerjaan.

Masukkan deskripsi gambar di sini

Dan pada gambar di bawah ini->Menunjukkan bahwa Anda perlu memilih ulang direktori kerja setelah memasuki mesin pengembangan:

Masukkan deskripsi gambar di sini

Dan pada gambar di bawah ini->Menunjukkan memasuki direktori kerja yang dipilih oleh mesin pengembangan terakhir:

Masukkan deskripsi gambar di sini

Direktori kerja yang dipilih setiap kali akan ditampilkan di bawah informasi mesin pengembangan: (ada direktori kerja tambahan untuk lagent di sini)

Masukkan deskripsi gambar di sini

Selanjutnya kami akan perkenalkan kapanPemetaan Pelabuhan

2.3.Pemetaan pelabuhan

2.3.1 Apa yang dimaksud dengan pemetaan port?

Pemetaan Pelabuhan Ini adalah teknologi jaringan yang dapat memetakan port mana pun di jaringan eksternal ke port yang sesuai di jaringan internal untuk mewujudkan komunikasi antara jaringan internal dan jaringan eksternal. Melalui pemetaan port, layanan atau aplikasi di intranet dapat diakses dari jaringan eksternal untuk mencapai komunikasi yang nyaman melalui jaringan.

Jadi mengapa kita perlu melakukan pemetaan port saat menggunakan mesin pengembangan?

Karena pada mata kuliah selanjutnya kita akan melakukan modeldemo_web Dalam praktik penerapan, selama proses ini, Anda mungkin mengalami masalah pemuatan antarmuka web yang tidak lengkap.Hal ini karena ketika menjalankan web_demo di mesin pengembangan Web IDE, mengakses langsung layanan http/https di mesin pengembangan mungkin mengalami masalah proxy.sumber daya uiTidak dimuat sepenuhnya.

Jadi untuk mengatasi masalah ini, kita perlu memetakan port koneksi yang menjalankan web_demo, danTautan jaringan eksternal dipetakan ke host lokal kami , kami menggunakan akses koneksi lokal untuk mengatasi masalah proxy ini. Mari kita praktekkan sekarang.

Masukkan deskripsi gambar di sini

Pertama-tama mari kita pahami cara kerja pemetaan port mesin pengembangan berdasarkan diagram:

Ada langkah praktis di bawah ini. Pahami dulu cara melakukan pemetaan port.

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

Di atas adalah perintah pemetaan port. Jalankan perintah ini pada host untuk melakukan pemetaan port. Berikut adalah diagram alur untuk memahami proses pemetaan port:

Masukkan deskripsi gambar di sini

PC pribadi akan terhubung dari jarak jauh ke satu-satunya port 37367 yang terbuka dari mesin pengembangan (ini disebutkan selama SSH, dan port yang terbuka dari setiap mesin pengembangan berbeda), dan mengatur opsi terowongan. Pelabuhan terbuka berfungsi sebagai stasiun transit untuk meneruskan lalu lintas.

  • -C: Aktifkan kompresi untuk mengurangi jumlah data yang ditransfer.
  • -N: Tidak menjalankan perintah jarak jauh, hanya membuat terowongan.
  • -g: Izinkan host jarak jauh untuk terhubung ke port yang diteruskan secara lokal.

Ketika perintah SSH ini dijalankan pada PC pribadi, klien SSH akan mendengarkan pada port 7860 mesin lokal.

Setiap lalu lintas yang dikirim ke port lokal 7860 akan diteruskan oleh terowongan SSH ke port 7860 di alamat 127.0.0.1 server jarak jauh.

Artinya, meskipun port mesin pengembangan ini tidak terekspos langsung ke jaringan eksternal, kami dapat mengakses layanan di server jarak jauh dengan aman melalui terowongan ini. .

2.3.2 Bagaimana cara melakukan pemetaan port?
2.3.2.1 Gunakan perintah ssh untuk pemetaan port

Kami masih membuka antarmuka mesin pengembangan, menemukan mesin pengembangan kami, dan klikLayanan khusus, salin perintah pertama,
Masukkan deskripsi gambar di sini

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

Mari kita perkenalkan kepadanya arti dari setiap bagian perintah:

  • -p 37367: Menentukan port untuk koneksi SSH ke 37367, yang telah disebutkan sebelumnya.
  • [email protected]: Menunjukkan untuk digunakan root Identitas pengguna terhubung kessh.intern-ai.org.cn tuan rumah ini.
  • -CNg
    • -C Biasanya digunakan untuk mengaktifkan kompresi.
    • -N Menunjukkan bahwa perintah jarak jauh tidak dijalankan, tetapi hanya koneksi yang dibuat untuk penerusan port, dll.
    • -g Izinkan host jarak jauh untuk terhubung ke port yang diteruskan secara lokal.
  • -L {本地机器_PORT}:127.0.0.1:{开发机_PORT}: Ini untuk mengatur penerusan port lokal untuk meneruskan port yang ditentukan pada mesin lokal (oleh {本地机器_PORT} mewakili) diteruskan ke host jarak jauh (di sini mis.ssh.intern-ai.org.cn)dari 127.0.0.1 (yaitu alamat loopback lokal) dan port mesin pengembangan yang ditentukan (ditentukan oleh{开发机_PORT} cepat).
  • -o StrictHostKeyChecking=no: Matikan pemeriksaan kunci host yang ketat untuk menghindari petunjuk atau kesalahan karena kunci host yang tidak dikenal saat menghubungkan untuk pertama kali.

Saat Anda menjalankan demo web, Anda dapat menggunakan perintah ini untuk melakukan pemetaan port, misalnya:

Kami membuat file hello_world.py (klik kanan pada antarmuka mesin pengembangan untuk membuat file dan mengubah nama menjadi hello_world.py) dan mengisi konten berikut di dalam file:

import socket
import re
import gradio as gr
 
# 获取主机名
def get_hostname():
    hostname = socket.gethostname()
    match = re.search(r'-(d+)$', hostname)
    name = match.group(1)
    
    return name
 
# 创建 Gradio 界面
with gr.Blocks(gr.themes.Soft()) as demo:
    html_code = f"""
            <p align="center">
            <a href="https://intern-ai.org.cn/home">
                <img src="https://intern-ai.org.cn/assets/headerLogo-4ea34f23.svg" alt="Logo" width="20%" style="border-radius: 5px;">
            </a>
            </p>
            <h1 style="text-align: center;">☁️ Welcome {get_hostname()} user, welcome to the ShuSheng LLM Practical Camp Course!</h1>
            <h2 style="text-align: center;">😀 Let’s go on a journey through ShuSheng Island together.</h2>
            <p align="center">
                <a href="https://github.com/InternLM/Tutorial/blob/camp3">
                    <img src="https://oss.lingkongstudy.com.cn/blog/202406301604074.jpg" alt="Logo" width="20%" style="border-radius: 5px;">
                </a>
            </p>

            """
    gr.Markdown(html_code)

demo.launch()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

Ingat setelah mengeditctrl+smenyimpan

Sebelum menjalankan kode, Anda perlu menggunakanpip install gradio==4.29.0Perintah untuk menginstal paket ketergantungan berikut (salin dan tempel perintah ke terminal), lalu jalankan paket tersebut di terminal Web IDEpython hello_world.pyMemesan

Masukkan deskripsi gambar di sini

Jika pemetaan port tidak dilakukan, maka tidak dapat diakses menggunakan IP lokal.

Masukkan deskripsi gambar di sini

Saya bisa memasukkannya ke PowerShell menggunakan perintah berikut:

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

Masukkan deskripsi gambar di sini

Ini melambangkan kesuksesan. (Melihat: Perintah ini tidak mengembalikan konten apa pun, yang berarti pemetaan port sedang berjalan, dan kemudian Anda dapat melihat antarmuka web ui dengan membuka koneksi di halaman web)

Masukkan deskripsi gambar di sini

2.3.2.2 Gunakan vscode untuk pemetaan port

Tentu saja, jika kita menjalankan UI web yang berbeda, kita perlu memasukkan perintah berulang kali, yang sangat merepotkan, dan kita perlu menggunakan VScode.Kami telah menghubungkan mesin pengembangan dari jarak jauh melalui SSH. VScode menyediakan pemetaan port otomatis. Kami tidak perlu mengkonfigurasinya secara manual.Bangun terminal, opsi port dapat ditemukan di sisi kanan terminal:

Masukkan deskripsi gambar di sini

Di sini Anda dapat melihat informasi pemetaan port. Jika Anda perlu mengubah port, Anda dapat mengubah nomor port di kolom port.

3. Perintah dasar Linux

Pada bagian ini, saya akan mengajak Anda memahami beberapa tentang LinuxOperasi dasar , dan gunakan beberapa alat. Sehingga setiap orang dapat menyelesaikannya sendiri ketika menemui masalah, jika Anda menemui masalah, Anda juga dapat berkomentar di sini dan saya akan menjawab Anda tepat waktu.

karena kita menggunakanMesin pengembanganjarang digunakanmanajemen otoritas , jadi kami tidak akan memperkenalkannya. (Semua operasi berikut dilakukan di terminal VScode)

3.1 Manajemen file

Di Linux, operasi manajemen file yang umum meliputi:

  • Buat berkas:bisa menggunakan touch perintah membuat file kosong.
  • Buat direktori:menggunakan mkdir Memesan.
  • Peralihan direktori:menggunakancdMemesan.
  • Tampilkan direktori:menggunakanpwdMemesan.
  • Lihat isi file: Jika digunakan cat Langsung menampilkan seluruh isi file,more Danless Dapat dilihat dalam halaman.
  • Sunting berkas:menyukai vi atauvim Tunggu editornya.
  • Salin file:menggunakan cp Memesan.
  • Buat tautan file:menggunakanlnMemesan.
  • Pindahkan file:lulus mv Memesan.
  • Hapus File:menggunakan rm Memesan.
  • hapus direktorirmdir(Hanya direktori kosong yang dapat dihapus) atau rm -r(Direktori yang tidak kosong dapat dihapus).
  • Temukan file:Bisa menggunakan find Memesan.
  • Lihat detail file atau direktori:menggunakanlsperintah, seperti menggunakan ls -lLihat informasi rinci tentang file dalam direktori.
  • Memproses file: Untuk operasi file yang kompleks, Anda dapat menggunakansedMemesan.

Berikut beberapa perintah yang akan kita gunakan dalam kursus ini:

3.1.1 menyentuh

Kita dapat menggunakan sentuhan untuk membuat file dengan cepat, sehingga kita tidak perlu mengklik secara manual untuk membuatnya.Misalnya kita ingin membuatdemo.pydokumen:

3.1.2 mkdir

Begitu pula jika ingin membuat file bernamatestDirektori:

Masukkan deskripsi gambar di sini

3.1.3 CD

Perintah ini akan menjadi perintah yang paling umum digunakan. Sebelum menggunakannya, Anda perlu menjelaskan struktur direktori kepada siswa yang tidak memiliki keterampilan komputer dan membuat gambaran agar semua orang dapat memahaminya:

Masukkan deskripsi gambar di sini

Yang kami gunakan saat ini adalahrootdirektori, yang juga merupakan direktori home dari pengguna root.~, di sistem operasi linux/Mewakili direktori root. Ada banyak direktori dan file yang dibutuhkan oleh sistem di direktori rootrootdirektori, di antaranya.Mewakili direktori saat ini,.. Direktori induk diwakili.Jika saya masuk sekarangtestdirektori dan kemudian kembali kerootDirektori, kita dapat melakukan ini:

3.1.4 kata sandi

kita bisa gunakanpwdPerintah untuk melihat direktori saat ini: Ini memudahkan kita menentukan di direktori mana kita berada saat ini.

Masukkan deskripsi gambar di sini

3.1.5 kucing

catPerintah tersebut dapat melihat isi file, dan lebih banyak perintah dapat digunakan--helpPerintah untuk melihat:

  • -a, --show-all setara dengan -vET
  • -b, –angka-bukan kosong jumlah jalur keluaran yang tidak kosong, menimpa -n
  • -e, setara dengan -vE
  • -E, --show -end menampilkan $ di akhir setiap baris
  • -n, --nomor nomor semua jalur keluaran
  • -s, --crick-blank menekan jalur keluaran kosong yang berulang
  • -t setara dengan -vT
  • -t, --show-tabs menampilkan karakter tab sebagai ^I
  • -v, --show penggunaan non-cetak ^ dan notasi M, kecuali LFD dan TAB
3.1.6 vi atau vim

Kita dapat menggunakannya ketika kita perlu mengedit fileviatauvimperintah, saat Anda memasuki pengeditan file, ada tiga mode:

Masukkan deskripsi gambar di sini

Masuk ke mode edit untuk digunakani, kenyamanan vim adalah Anda dapat membuat modifikasi file sederhana di terminal.

3.1.7 cp dan ln (penekanan)

**cp**Perintah ini akan sering digunakan dalam kursus berikut. Digunakan untuk menyalin file atau direktori ke direktori lain.

  • Salin file:cp 源文件 目标文件
  • Salin direktori:cp -r 源目录 目标目录

Namun jika kita ingin menggunakan model tersebut, operasi ini akan memakan banyak ruang disk, jadi biasanya kita menggunakanln perintahnya, ini sama dengan shortcut windows. Ada dua jenis tautan di Linux:tautan keras(tautan keras)dengantautan lunak (tautan simbolik), tautan keras berarti suatu file dapat memiliki banyak nama, sedangkan tautan lunak menghasilkan file khusus yang isinya menunjuk ke lokasi file lain. Tautan keras ada dalam sistem file yang sama, tetapi tautan lunak dapat menjangkau sistem file yang berbeda.

Oleh karena itu, kami umumnya menggunakan koneksi lunak. Metode penggunaan umum adalah sebagai berikut:

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

Parameternya adalah sebagai berikut:

  • -s: Membuat tautan lunak (tautan simbolik) juga paling umum digunakan;
  • -f: Paksa eksekusi, timpa file target yang ada;
  • -i: Mode interaktif, jika file ada, pengguna akan ditanya apakah akan menimpanya;
  • -n: memperlakukan tautan simbolik sebagai direktori umum;
  • -v: Menampilkan pemrosesan detail.
3.1.8 mv dan rm

mvperintah danrmPerintahnya digunakan dengan cara yang serupa, namunmvIni digunakan untuk memindahkan file atau direktori, dan juga dapat diubah namanya.rmPerintah ini digunakan untuk menghapus file atau direktori.

Metode yang umum digunakan adalah sebagai berikut:

  • perintah mv

Parameter yang umum digunakan:

  • -i: Mode interaktif, tanyakan sebelum menimpa.
  • -f: Paksa cakupan.
  • -u: Pindahkan hanya jika file sumber lebih baru dari file target.

Contoh penggunaan:

  • mv file1.txt dir1/: memindahkan file file1.txt Pindah ke direktoridir1 tengah.

  • mv file1.txt file2.txt: memindahkan file file1.txt Ganti nama menjadifile2.txt

  • perintah rm

Parameter yang umum digunakan:

  • -i: Mode interaktif, tanyakan sebelum menghapus.
  • -f: Penghapusan paksa, mengabaikan file yang tidak ada, tanpa meminta konfirmasi.
  • -r:Menghapus direktori dan isinya secara rekursif.

Contoh penggunaan:

  • rm file.txt:Hapus File file.txt
  • rm -r dir1/: Menghapus direktori secara rekursif dir1 dan seluruh isinya.

Perintah untuk menghapus direktori juga dapat digunakanrmdir

3.1.9 menemukan

findPerintah ini adalah alat pencarian file yang ampuh di sistem Linux. Perintah ini dapat menemukan file atau direktori yang memenuhi ketentuan dalam direktori tertentu dan subdirektorinya dan melakukan operasi terkait.

Berikut ini adalahfindBeberapa kegunaan umum dari perintah ini:

  1. Temukan berdasarkan nama file:menggunakan-name pilihan untuk menemukan file berdasarkan nama file. Misalnya,find /path/to/directory -name "file.txt"akan mencari direktori yang ditentukan dan subdirektorinya diberi namafile.txtdokumen.
  2. Temukan berdasarkan jenis file:menggunakan-type pilihan untuk menemukan file berdasarkan jenis file. Misalnya,find /path/to/directory -type fSemua file biasa di direktori tertentu dan subdirektorinya akan ditemukan.
  3. Temukan berdasarkan ukuran file:menggunakan-size pilihan untuk menemukan file berdasarkan ukuran file. Misalnya,find /path/to/directory -size +100MAkan menemukan file yang lebih besar dari 100MB di direktori tertentu dan subdirektorinya.
  4. Cari berdasarkan waktu modifikasi:menggunakan-mtime-atimeatau-ctime Opsi menemukan file berdasarkan waktu modifikasi, waktu akses, atau waktu perubahan status. Misalnya,find /path/to/directory -mtime -7Akan menemukan file di direktori tertentu dan subdirektorinya yang telah diubah dalam 7 hari.
  5. Temukan berdasarkan izin file:menggunakan-perm opsi untuk menemukan file berdasarkan izin file. Misalnya,find /path/to/directory -perm 755Akan menemukan file dengan izin 755 di direktori yang ditentukan dan subdirektorinya.
  6. Temukan berdasarkan pengguna atau grup:menggunakan-useratau-group Opsi menemukan file berdasarkan pemilik atau grupnya. Misalnya,find /path/to/directory -user usernameAkan mencari direktori yang ditentukan dan subdirektorinya milik penggunausernamedokumen.
  7. melakukan operasi:menggunakan-exec Opsi dapat melakukan operasi terkait pada file yang ditemukan. Misalnya,find /path/to/directory -name "*.txt" -exec rm {} ;akan menghapus semua akhiran yang ditemukan dengan.txtmengajukan di akhir.
3.1.10 aku

lsPerintah ini juga dapat digunakan untuk membuat daftar isi direktoridetail

Parameter dan metode penggunaan yang umum digunakan adalah sebagai berikut:

  • -a: Menampilkan semua file dan direktori, termasuk file tersembunyi (di luarnya.file atau direktori yang dimulai dengan .).
  • -l: Menampilkan informasi detail dalam format panjang, termasuk izin file, pemilik, ukuran, waktu modifikasi, dll.
  • -h:Dan-lDigunakan dalam kombinasi untuk menampilkan ukuran file dengan cara yang dapat dibaca manusia (mis.KMGTunggu).
  • -R: Daftar isi subdirektori secara rekursif.
  • -t : Menampilkan urutan waktu modifikasi file. ,

Masukkan deskripsi gambar di sini

3.1.11 sudah tua

sedCommand adalah editor aliran, terutama digunakan untuk pemrosesan teks. Ini sering digunakan saat memproses operasi file yang kompleks. Ini akan digunakan dalam kursus selanjutnya.sedParameter yang umum digunakan dan contoh penggunaan perintah adalah sebagai berikut:

  • Deskripsi Parameter:
    • -e<script> atau--expression=<script>: Tentukan skrip langsung di baris perintah untuk pemrosesan teks.
    • -f<script文件> atau--file=<script文件>: Membaca skrip dari file skrip yang ditentukan untuk pemrosesan teks.
    • -n atau--quiet atau--silent: Hanya mencetak hasil keluaran yang diproses oleh skrip, dan jangan mencetak baris yang tidak cocok.
  • Deskripsi tindakan:
    • a: Tambahkan string teks yang ditentukan ke baris berikutnya dari baris saat ini.
    • c: Mengganti rentang baris tertentu dengan string teks tertentu.
    • d: Hapus baris yang ditentukan.
    • i: Tambahkan string teks yang ditentukan ke baris sebelumnya dari baris saat ini.
    • p : Mencetak garis yang dipilih.biasanya dengan-n Digunakan bersama dengan parameter, hanya garis yang cocok yang dicetak.
    • s : Gunakan ekspresi reguler untuk penggantian teks. Misalnya,s/old/new/g Ganti semua "InternLM" dengan "InternLM yyds".
  • Contoh:

Masukkan deskripsi gambar di sini

digunakan dalam contohechoperintah, ini sama dengan di pythonprintSama, dulu untuk mencetak konten, disini menggunakan karakter pipa>Cetak InternLM ke file file. Termasuk karakter pipa yang umum digunakan<Dan|, misalnya kita bisa menggunakangrepPerintah untuk melihat penyertaan yang diinstal dalam pythonosPaket lapangan:

Masukkan deskripsi gambar di sini

grep Adalah alat pencarian teks yang ampuh. Parameter yang umum digunakan adalah sebagai berikut:

  • -i: Cari apa pun kasusnya.
  • -v: Membalikkan kecocokan, yaitu menampilkan garis yang tidak cocok.
  • -n: Menampilkan nomor baris.
  • -c: Menghitung jumlah garis yang cocok.

3.2 Manajemen proses

Manajemen prosesPerintah adalah alat penting untuk pemantauan sistem dan manajemen proses. Perintah manajemen proses yang umum digunakan meliputi:

  • hal.: Melihat proses yang sedang berjalan
  • atas:Tampilan dinamis dari proses yang berjalan
  • pohon ps: Melihat proses yang berjalan dalam tampilan hierarki
  • pgrep: digunakan untuk menemukan proses
  • Bagus:Mengubah prioritas suatu proses
  • pekerjaan: Menampilkan informasi terkait proses
  • bg dan fg: Memindahkan proses ke latar belakang
  • membunuh: mematikan proses

Ada juga perintah khusus di mesin pengembangannvidia-smi , yang merupakan alat baris perintah untuk Antarmuka Manajemen Sistem NVIDIA, yang digunakan untuk memantau dan mengelola perangkat GPU NVIDIA. Ini memberikan cara cepat untuk melihat informasi seperti status GPU, penggunaan, suhu, penggunaan memori, penggunaan daya, dan proses yang berjalan pada GPU.

Berikut ini contoh penggunaan masing-masing perintah:

  • ps : Daftar proses dalam sistem saat ini. Informasi proses yang berbeda dapat ditampilkan menggunakan opsi berbeda, seperti:
    • ps aux  # 显示系统所有进程的详细信息
      
      • 1
  • top : Menampilkan status proses dalam sistem secara dinamis. Ini memperbarui daftar proses secara real time, menunjukkan proses dengan penggunaan CPU dan memori tertinggi.
    • top  # 启动top命令,动态显示进程信息
      
      • 1
  • pstree: Menampilkan proses yang sedang berjalan dan hubungan induk-anaknya dalam bentuk diagram pohon.
    • pstree  # 显示进程树
      
      • 1
  • pgrep : Temukan proses yang cocok dengan kriteria. Anda dapat mencari proses berdasarkan nama proses, pengguna dan kondisi lainnya.
    • pgrep -u username  # 查找特定用户的所有进程
      
      • 1
  • nice: Mengubah prioritas suatu proses.nice Semakin rendah nilainya, semakin tinggi prioritas prosesnya.
    • nice -n 10 long-running-command  # 以较低优先级运行一个长时间运行的命令
      
      • 1
  • jobs: Menampilkan daftar pekerjaan di sesi terminal saat ini, termasuk proses yang berjalan di latar belakang.
    • jobs  # 列出当前会话的后台作业
      
      • 1
  • bg Danfgbg Biarkan proses yang ditangguhkan berjalan di latar belakang,fg Membawa proses latar belakang kembali ke latar depan.
    • bg  # 将最近一个挂起的作业放到后台运行
      fg  # 将后台作业调到前台运行
      
      • 1
      • 2
  • kill: Mengirim sinyal ke proses tertentu, biasanya digunakan untuk mematikan proses.
    • kill PID  # 杀死指定的进程ID
      
      • 1
    • Melihat,kill Perintah dikirim secara defaultSIGTERM Sinyal, yang dapat digunakan jika proses tidak merespon-9menggunakanSIGKILL Signal dengan paksa menghentikan proses:

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

SIGTERM Sinyal (Terminasi Sinyal) adalah sinyal standar yang digunakan di sistem operasi Unix dan mirip Unix untuk meminta penghentian proses. Sinyal ini biasanya dikirim ketika sistem atau pengguna ingin menghentikan suatu proses dengan baik.DanSIGKILLSinyalnya berbeda,SIGTERM Sinyal dapat ditangkap dan ditangani oleh suatu proses, sehingga proses tersebut dapat dibersihkan sebelum keluar. (dari internet)

Berikut ini adalah nvidia-smi Beberapa perintah dasar penggunaan perintah:

  • Tampilkan informasi ringkasan tentang status GPU:
    • nvidia-smi
      
      • 1
  • Menampilkan informasi status GPU terperinci:
    • nvidia-smi -l 1
      
      • 1
    • Perintah ini akan memperbarui informasi status setiap 1 detik.

  • Tampilkan riwayat penggunaan GPU:
    • nvidia-smi -h
      
      • 1
  • Cantumkan semua GPU dan tampilkan PID serta nama prosesnya:
    • nvidia-smi pmon
      
      • 1
  • Akhiri secara paksa proses GPU yang ditentukan:
    • nvidia-smi --id=0 --ex_pid=12345
      
      • 1
    • Ini akan menghentikan proses secara paksa dengan PID 12345 pada GPU ID 0.

  • Setel mode kinerja GPU:
    • nvidia-smi -pm 1
      nvidia-smi -i 0 -pm 1
      
      • 1
      • 2
    • Perintah pertama akan mengatur semua GPU ke mode performa, perintah kedua hanya menargetkan GPU dengan ID 0.

  • Mulai ulang GPU:
    • nvidia-smi --id=0 -r
      
      • 1
    • Ini akan memulai ulang GPU dengan ID 0.

  • Tampilkan informasi bantuan:
    • nvidia-smi -h
      
      • 1

Berikut pengenalan informasi GPU melalui gambar:

Masukkan deskripsi gambar di sini

3.3 Penggunaan alat

Ini sebuah alatTMUXTMUX adalah terminal multiplekser. Ini memudahkan untuk beralih di antara beberapa terminal, melepaskannya (ini tidak mematikan terminal, terminal terus berjalan di latar belakang) dan menyambungkannya kembali ke terminal lain. Mengapa memperkenalkan alat ini?Karena itu akan dilakukan nantiXtunerSaat menyempurnakan model, itu akan memakan waktu lamaTmuxIni dapat mengatasi situasi di mana program dimatikan dan terganggu. Berikut cara menginstal dan menggunakannya.

Karena mesin pengembangannya menggunakan sistem operasi ubuntu, Anda dapat menggunakannyalsb_release -a Perintah untuk melihat informasi sistem ubuntu:

Masukkan deskripsi gambar di sini

dan kemudian gunakanapt install tmuxPerintah untuk menginstal tmux. Anda dapat menggunakannya setelah instalasi selesai.tmuxAnda dapat menggunakan tmux dengan perintah. Jika Anda ingin keluar dari tmux, Anda dapat menggunakan "tombol ctrl+d"tombol pintas.

Pada mesin pengembangan, hanya file di jalur /root yang disimpan secara persisten. Perangkat lunak yang diinstal di jalur lain akan diatur ulang setelah dimulai ulang.

Cara penggunaan khusus dapat dilihat di:

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

4. Pengenalan Conda dan Shell (Tambahan)

Conda adalah manajemen paket sumber terbuka dan sistem manajemen lingkungan yang berjalan di Windows, macOS, dan Linux. Dengan cepat menginstal, menjalankan dan memperbarui paket perangkat lunak dan dependensinya. Dengan menggunakan Conda Anda dapat dengan mudah membuat, menyimpan, memuat, dan mengganti lingkungan berbeda di mesin lokal Anda.

Sudah terinstal di mesin pengembanganconda, kita bisa menggunakannya secara langsung, dan ada juga yang built-in di mesin pengembangancondaMemesanstudio-conda, kami akan perkenalkan di bawah inicondaPenggunaan dasar, danstudio-condaCara menggunakan dan memperkenalkanstudio-condaBagaimana hal itu dicapai.

Kami akan memperkenalkannya di bagian berikut:

  1. pengaturan konda
  2. manajemen lingkungan konda
  3. conda dan pip
  4. Studio-conda digunakan dengan Shell (ekstensi)

4.1 pengaturan konda

kita bisa gunakanconda --versionuntuk melihat mesin pengembangan saat inicondainformasi versi:

Masukkan deskripsi gambar di sini

kapan kita ingin menggunakannyacondaAkan sangat lambat saat menginstal paket. Kita dapat mengatur mirroring domestik untuk meningkatkan kecepatan instalasi.

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

Tapi biasanya kami menggunakanpipMenginstal paketnya, kami akan memperkenalkannya nantipipDancondaperbedaan.

Jika kita ingin melihat informasi konfigurasi conda, kita dapat menggunakanconda config --showperintah, jika ini adalah pengaturan default mesin pengembangan, ia akan mengembalikan: (sebagian informasi)

Masukkan deskripsi gambar di sini

Konfigurasi ini ada diCondaKonfigurasi lingkungan akan mempengaruhi metode dan hasil instalasi paket perangkat lunak, pembaruan, manajemen lingkungan dan operasi lainnya.

4.2 pengelolaan lingkungan conda

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

4.2.1 Menciptakan lingkungan virtual

kita bisa gunakanconda create -n name python``=3.10 Buat lingkungan virtual, artinya lingkungan virtual dengan Python versi 3.10 dan namanya dibuat.Setelah pembuatan, Anda bisa.condadi bawah direktorienvsDitemukan di direktori.

Masukkan deskripsi gambar di sini

Jika versi python tidak ditentukan, lingkungan virtual berdasarkan versi python terbaru akan dibuat secara otomatis. Pada saat yang sama, kita dapat menginstal paket yang diperlukan saat membuat lingkungan virtual:conda create -n name numpy matplotlib python=3.10(Tetapi saya tidak menyarankan Anda menggunakannya dengan cara ini)

Parameter umum untuk membuat lingkungan virtual adalah sebagai berikut:

  • -n atau --name: Tentukan nama lingkungan yang akan dibuat.
  • -c atau --channel: Tentukan saluran paket tambahan.
  • –clone: ​​​​Mengkloning lingkungan yang ada untuk membuat lingkungan baru.
  • -p atau --prefix: Tentukan jalur instalasi lingkungan (lokasi non-default).
4.2.2 Periksa lingkungan virtual apa yang ada

Jika kita ingin melihat lingkungan virtual yang kita miliki, kita dapat menggunakan perintah berikut:

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

Masukkan deskripsi gambar di sini

Pada saat yang sama, kita juga dapat melihat direktori dimana lingkungan tersebut berada.

4.2.3 Mengaktifkan dan keluar dari lingkungan virtual

Setelah kita membuat lingkungan virtual yang bisa kita gunakanconda activate name perintah untuk mengaktifkan lingkungan virtual, bagaimana cara memeriksa apakah peralihan berhasil?Caranya mudah, lihat saja(base)Entah itu menjadi nama lingkungan virtual yang dibuat.

Masukkan deskripsi gambar di sini

Jika Anda ingin keluar dari lingkungan virtual, Anda dapat menggunakan:

conda activate
conda deactivate
  • 1
  • 2

Kedua perintah akan kembalibaselingkungan karenabaseIni adalah lingkungan dasar conda.baseDirektori lingkungan memiliki tingkat yang lebih tinggi daripada direktori lingkungan virtual lainnya.

4.2.4 Hapus dan ekspor lingkungan virtual

Jika Anda ingin menghapus lingkungan virtual, Anda dapat menggunakanconda remove --name name --all, jika Anda hanya menghapus satu atau beberapa paket di lingkungan virtual, Anda dapat menggunakanconda remove --name name package_name

Mengekspor lingkungan virtual sangat diperlukan untuk lingkungan tertentu, karena ketergantungan beberapa paket perangkat lunak sangat kompleks, dan akan merepotkan untuk membuat ulang dan mengkonfigurasinya sendiri. Jika kita mengekspor lingkungan yang dikonfigurasi, kita dapat memulihkannya di lain waktu. dan Anda juga dapat berbagi konfigurasi dengan orang lain.

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

Misalnya kita akan melakukannyaxtuner0.1.17Lingkungan virtual diekspor dan informasi konfigurasinya adalah sebagai berikut:

Masukkan deskripsi gambar di sini

Ini termasuknama lingkunganLokasi repositori online untuk paket lingkungan virtualDanKetergantungan lingkungan virtual . Nanti kami akan menggunakan metode penggunaan tingkat lanjut untuk memulihkan lingkungan virtual dengan cepat.

4.3 conda dan pip

Pada bagian ini kami memperkenalkan beberapacondaDanpipBeberapa perbedaan:

  1. conda dapat mengelola paket non-python, dan pip hanya dapat mengelola paket python.
  2. conda dapat digunakan untuk membuat lingkungan virtual, tetapi pip tidak bisa dan harus bergantung pada paket seperti virtualenv.
  3. Paket yang diinstal oleh conda dikompilasifile biner, paket dependen akan diinstal secara otomatis selama instalasi file paket;roda atau kode sumber, dependensi selain bahasa python tidak akan didukung selama proses instalasi.
  4. Paket yang diinstal oleh conda akan diunduh ke direktori yang sesuai dengan lingkungan virtual saat ini dan dapat diunduh satu kali dan diinstal beberapa kali. pip diunduh langsung ke lingkungan yang sesuai.

Roda Ini adalah format paket instalasi Python.

Ini adalah format distribusi biner yang telah dikompilasi, mirip dengan biner yang dikompilasi di conda.

Keuntungan utama dari format Roda meliputi:

  1. Instalasi cepat: Karena sudah dikompilasi sebelumnya, tidak perlu melalui proses kompilasi seperti instalasi kode sumber saat instalasi, sehingga menghemat waktu.
  2. Konsistensi: Memastikan hasil instalasi konsisten di berbagai sistem dan lingkungan.

Misalnya, jika Anda ingin menginstal pustaka Python yang besar, menggunakan format Wheel dapat menghindari masalah instalasi yang disebabkan oleh perbedaan lingkungan kompilasi pada mesin yang berbeda. Selain itu, bagi sistem yang tidak memiliki lingkungan kompilasi atau memiliki kemampuan kompilasi yang lemah, format Wheel dapat membuat proses instalasi menjadi lebih lancar.

4.4 Penggunaan Studio-conda dan Shell (ekstensi)

Bagian ini merupakan bagian lanjutan, karena menurut saya bagian ini sangat menarik dan praktis sekali, jadi jika anda tertarik bisa mempelajarinya.

Mari kita perkenalkan dulustudio-conda , yang merupakan perintah bawaan mesin pengembangan dan diimplementasikan melalui skrip Shell. Apa itu skrip Shell?

Skrip cangkang File teks berisi serangkaian perintah yang disusun dalam urutan tertentu untuk mengotomatisasi tugas di Unix/Linux atau lingkungan sistem operasi serupa.

Skrip shell biasanya ditulis dalam bahasa Shell. Bahasa umum Shell seperti Bash, Sh, dll. adalah perintah dasar Linux yang kami perkenalkan sebelumnya, yang termasuk dalam bahasa Shell.

Ini memiliki beberapa fitur penting berikut:

  1. otomatisasi : Serangkaian operasi yang berulang dan kompleks dapat ditulis sebagai skrip dan kemudian menjalankan skrip untuk mengotomatiskan operasi ini, menghemat waktu dan mengurangi kesalahan. Misalnya saja script yang rutin membackup file-file penting setiap hari.
  2. Manajemen Sistem : Digunakan untuk mengelola konfigurasi sistem, izin pengguna, kontrol proses, dll. Misalnya, skrip yang membuat pengguna baru dan menetapkan izinnya.
  3. Pemrosesan batch : Kemampuan untuk memproses banyak file atau data secara bersamaan. Misalnya, skrip yang mengonversi sekumpulan file gambar dari satu format ke format lainnya.
  4. pengendalian proses: Seperti penilaian kondisional (if-else), loop (untuk, sementara), dll., yang memungkinkan skrip melakukan operasi berbeda sesuai dengan situasi berbeda.

Itustudio-condaIni adalah bagian dari otomatisasi. File konfigurasi lingkungan bash pengguna root di mesin pengembangan kami adalah.bashrc, tetapi sebenarnya file konfigurasi utamanya adalah/share/.aide/config/bashrc, ada beberapa perintah yang ditulis dalam file ini yang memungkinkan kita melakukan beberapa operasi dengan lebih cepat, seperti:

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

exportdigunakan untuk mengatur variabel lingkungan.aliasadalah menyalin file sh ke dalam variabel. Ini dapat dijalankan di terminal sebagai perintah kamistudio-condaItu dia.

Di Sinistudio-smiIni digunakan untuk memeriksa penggunaan memori virtual saat kita membuka/share/studio-smiFilenya bisa dilihat:

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

Script ini digunakan untuk memeriksa apakah ada a vgpu-smi perintah, jika ada, itu akan dijalankanvgpu-smi untuk menampilkan informasi status untuk GPU virtual (vGPU); jika tidak ada, maka akan berjalannvidia-smi untuk menampilkan informasi status GPU NVIDIA. Seperti yang ditunjukkan di bawah ini:

Masukkan deskripsi gambar di sini

nvidia-smi adalah alat untuk memantau dan mengelola perangkat fisik GPU NVIDIA, danvgpu-smi Dirancang untuk memantau dan mengelola sumber daya GPU yang divirtualisasikan melalui teknologi NVIDIA vGPU.

kita melihat/share/install_conda_env.shIsi filenya adalah sebagai berikut:

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

salah satu diantara mereka*list*()Tunggu, itu sajastudio-condafungsi, yang dapat mengimplementasikan operasi tertentu, misalnya dapat kita gunakanstudio-conda env listUntuk melihat lingkungan default:

Masukkan deskripsi gambar di sini

di dalam*clone*()Fungsi utama dari fungsi ini adalah untuk menyalin lingkungan, tetapi hanya dapat disalin dari lingkungan default. Kode utamanya sebenarnya:

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

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

Buka zip paket terkompresi dari lingkungan preset, lalu buat lingkungan virtual melalui klon. Namun, beberapa logika juga diatur dalam skrip Shell, tetapi ini hanya beberapa penilaian. Jika Anda familiar dengan bahasa pemrograman apa pun, Anda seharusnya bisa untuk memahaminya. Jika Anda tidak bisa memahaminya, itu juga bukan masalah besar.

Jadi bagaimana kita menambahkan lingkungan yang kita buat sendiristudio-condaBagaimana dengan tengah?

Langkah pertama adalah membuat lingkungan conda baru di /share/conda_envs

conda buat -p /bagikan/conda_envs/xxx python=3.1x

Langkah kedua adalah menyalin file di bawah /root/.conda/pkgs di mesin lokal ke /share/pkgs, kompres ulang dan ganti (langkah ini untuk menyimpan paket publik berukuran besar selama proses pembuatan conda untuk menghindari pengunduhan berulang)

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

cd /berbagi dan tar -zcvf pkgs.tar.gz pkgs

Langkah ketiga adalah memperbarui fungsi daftar di install_conda_env.sh dan menambahkan deskripsi lingkungan conda baru.

Di atas adalah metode yang disediakan oleh mesin pengembangan secara default. Sebenarnya ada metode lain yang kami gunakan sebelumnyacondaDieksporxtuner0.1.17File konfigurasi untuk lingkungan virtual, dapat kita gunakanconda env create -f xtuner0.1.17.yml perintah untuk memulihkan lingkungan virtual.Mari kita tulis skrip Shell sederhana untuk mengimplementasikan operasi ini: Kita membuattest.shfile, tulis konten berikut:

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

Setelah kita menyelesaikan pembuatan skrip Shell, kita perlu memberikan izin pada skrip tersebut.chmod +x test.sh , lalu masuk./test.sh restore xtuner0.1.17Dan tekan Enter untuk memulihkan lingkungan virtual.

Masukkan deskripsi gambar di sini

Namun hal ini tidak jauh berbeda dengan penggunaan langsung. Jika operasi ini dibandingkan dengan operasi di mesin pengembangan,studio-conda Menggabungkan perintah akan sangat mudah, tetapi metode menyalin lingkungan berbeda.Oleh karena itu, jika Anda ingin menerapkannya, Anda perlu melakukannya/share/install_conda_env.shLogika file diubah.

Oke, itu saja konten level ini, semoga konten di atas dapat bermanfaat bagi semua orang di masa depan. Jika Anda ingin mempelajari lebih lanjut tentang Linux, Anda dapat membaca artikel blog saya , akan sangat membantu bagi kita untuk mempelajarinya. Model besar tidak berdampak banyak, tetapi jika Anda mempelajari Linux dengan baik, pembelajaran model besar Anda akan menjadi sangat lancar. Terakhir, jangan lupa untuk menyelesaikan level yang telah kita tentukan sebelumnya!

Tautan blog:Bahasa Indonesia: linux

masalah umum

1. Lingkungan mesin pengembangan InternStudio rusak. Bagaimana cara menginisialisasi lingkungan mesin pengembangan?

Jalankan dengan hati-hati! ! ! !Semua data akan hilang. Ini hanya tersedia di platform InternStudio.

  • Langkah pertama adalah menghubungkan terminal lokal ke mesin pengembangan melalui ssh (harus terhubung melalui ssh untuk beroperasi, bukan di web!!!)
  • Eksekusi langkah kedua rm -rf /root, perlu waktu sekitar 10 menit untuk menunggu
  • Langkah ketiga adalah me-restart mesin pengembangan. Sistem akan mereset file konfigurasi di jalur /root.
  • langkah keempat ln -s /share /root/share

Misi tingkat

Untuk melewati misi level, Anda perlu mengambil tangkapan layar dengan langkah-langkah utama:

rincian misiWaktu yang diperlukan untuk menyelesaikannya
MisiSelesaikan koneksi SSH dan pemetaan port lalu jalankanhello_world.py10 menit
Tugas opsional 1Selesaikan perintah dasar Linux pada mesin pengembangan10 menit
Tugas opsional 2Gunakan VSCODE untuk terhubung dari jarak jauh ke mesin pengembangan dan menciptakan lingkungan conda10 menit
Tugas opsional 3Buat dan jalankantest.shdokumen10 menit