Bagaimana cara menjalankan Tensorboard di server jarak jauh?

116

Saya baru mengenal Tensorflow dan akan sangat diuntungkan dari beberapa visualisasi tentang apa yang saya lakukan. Saya memahami bahwa Tensorboard adalah alat visualisasi yang berguna, tetapi bagaimana cara menjalankannya di mesin Ubuntu jarak jauh saya?

pengguna
sumber
Beberapa solusi yang mungkin: (1) Ini mungkin sama dengan berjalan di mesin lokal, meskipun saya belum memverifikasi ini: setelah Anda menjalankannya, ini memberi Anda nomor port, dengan itu Anda mengaksesnya dari browser di lokal Anda mesin. (2) Apakah Anda dapat menggunakan perangkat lunak desktop jarak jauh seperti RealVNC? (3) Saya menganggap Anda juga menjalankan perhitungan tensorflow pada mesin jarak jauh yang sama; Anda juga dapat mengunduh file log ke komputer lokal Anda, dan menjalankan tensorboard di komputer lokal Anda.
Yao Zhang

Jawaban:

185

Inilah yang saya lakukan untuk menghindari masalah membuat server jarak jauh menerima IP eksternal lokal Anda:

  • ketika saya ssh ke mesin, saya menggunakan opsi -Luntuk mentransfer port 6006server jarak jauh ke port 16006mesin saya (misalnya): ssh -L 16006:127.0.0.1:6006 olivier@my_server_ip

Apa yang dilakukannya adalah bahwa semua yang ada di port 6006server (masuk 127.0.0.1:6006) akan diteruskan ke mesin saya di port 16006.


  • Anda kemudian dapat meluncurkan tensorboard pada mesin jarak jauh menggunakan standar tensorboard --logdir logdengan 6006port default
  • Di komputer lokal Anda, buka http://127.0.0.1:16006 dan nikmati TensorBoard jarak jauh Anda.
Olivier Moindrot
sumber
1
Juga memiliki masalah dengan plot tensorboard yang semuanya hitam di Safari, berfungsi di Chrome (terkait dengan masalah # 4856 )
Olivier Moindrot
2
Petunjuk kecil: 127.0.0.1ini ip mesin lokal Anda , jadi Anda harus membiarkannya apa adanya. Jangan mengubahnya ke ip jarak jauh Anda. Saya menyia-nyiakan 10 menit untuk ini. Bodohnya aku!
DarkZero
ini dan menegakkan IPv4 dengan -4bendera ssh menyelesaikannya. Membaca pertanyaan serupa, banyak yang mengalami masalah dengan alamat IPv6 di server mereka.
Robert Parcus
Sepertinya saya harus tinggal di shell ssh. Jika saya menutup shell ssh, tidak ada respons dari tensorboard jarak jauh. Apakah ada cara untuk tetap terhubung ke tensorboard saat mematikan shell ssh?
Fan
@Fan: periksa jawaban lainnya di bawah . Pada dasarnya Anda dapat menambahkan -Nbendera untuk menghindari membuka shell ssh. Menambahkan -fmenempatkan koneksi ssh di latar belakang.
Olivier Moindrot
78

Anda dapat mem-port-forward dengan sshperintah lain yang tidak perlu terikat dengan cara Anda terhubung ke server (sebagai alternatif dari jawaban lain). Jadi, urutan langkah-langkah di bawah ini sewenang-wenang.

  1. dari mesin lokal Anda , jalankan

    ssh -N -f -L localhost:16006:localhost:6006 <user@remote>

  2. di mesin jarak jauh , jalankan:

    tensorboard --logdir <path> --port 6006

  3. Kemudian, navigasikan ke (dalam contoh ini) http: // localhost: 16006 di komputer lokal Anda.

(penjelasan dari perintah ssh:

-N : tidak ada perintah jarak jauh

-f : letakkan ssh di latar belakang

-L <machine1>:<portA>:<machine2>:<portB> :

maju <machine2>:<portB>(lingkup jarak jauh) ke <machine1>:<portA>(lingkup lokal)

eqzx.dll
sumber
seperti yang disebutkan oleh @ 0xcaff, Anda harus mendengarkan di antarmuka Anda yang lain
mmohaveri
Untuk port tertentu, ssh -p PORTNUMBER -N -f -L localhost: 16006: localhost: 6006 <user @ remote>.
Wey Shi
63

Anda tidak perlu melakukan sesuatu yang mewah. Lari saja:

tensorboard --host 0.0.0.0 <other args here>

dan hubungkan dengan url dan port server Anda. Perintah tersebut --host 0.0.0.0memberi tahu tensorflow untuk mendengarkan dari koneksi di semua alamat IPv4 di mesin lokal.

0xcaff
sumber
Ini harus menjadi jawaban yang benar .. kemungkinan besar tensorboard tidak terikat ke alamat yang terlihat oleh layanan eksternal.
Duane
1
Ini tidak berhasil untuk saya untuk server jarak jauh ... Apa yang saya lewatkan?
Idan azuri
Jika Anda hanya ingin mendengarkan pada IP publik Anda, Anda dapat melakukan: tensorboard --host $ (hostname -I) <other args here> Dan kemudian Anda dapat menyalin-tempel URL yang dicetak oleh tensorboard: TensorBoard 1.12.2 di 10.0 .50.42: 6006 (Tekan CTRL + C untuk keluar)
Morten
1
@Idanazuri Apakah Anda memiliki akses http ke mesin jarak jauh Anda, atau apakah itu firewall (misalnya: hanya dapat diakses melalui koneksi ssh)? Jika hanya ssh, maka jawaban ini tidak akan berhasil untuk Anda.
drevicko
17

Pilihan lain jika Anda tidak bisa membuatnya berfungsi karena alasan tertentu adalah dengan memasang direktori logdir pada sistem berkas Anda dengan sshfs:

sshfs user@host:/home/user/project/summary_logs ~/summary_logs

lalu jalankan Tensorboard secara lokal.

Ilmuwan 1642
sumber
10
  1. Temukan IP eksternal lokal Anda dengan googling "whats my ip"atau memasukkan perintah ini:wget http://ipinfo.io/ip -qO -
  2. Tentukan IP eksternal jarak jauh Anda . Ini mungkin yang muncul setelah nama pengguna Anda saat ssh-ing ke server jauh. Anda juga bisa wget http://ipinfo.io/ip -qO -lagi dari sana.
  3. Amankan lalu lintas server jarak jauh Anda untuk hanya menerima alamat IP eksternal lokal Anda
  4. Jalankan Tensorboard. Perhatikan port defaultnya:6006
  5. Masukkan alamat IP eksternal jarak jauh Anda ke browser Anda, diikuti dengan porta:123.123.12.32:6006

Jika server jarak jauh Anda terbuka untuk lalu lintas dari alamat IP lokal Anda, Anda seharusnya dapat melihat Tensorboard jarak jauh Anda.

Peringatan : jika semua lalu lintas internet dapat mengakses sistem Anda (jika Anda belum menentukan satu alamat IP yang dapat mengaksesnya), siapa pun mungkin dapat melihat hasil TensorBoard Anda dan kabur dengan membuat SkyNet sendiri.

JohnAllen
sumber
7

Ini bukan jawaban yang tepat tetapi pemecah masalah, mudah-mudahan membantu networker kurang berpengalaman lainnya seperti saya.

Dalam kasus saya (firefox + ubuntu16) browser terhubung, tetapi menampilkan halaman kosong (dengan logo tensorboard di tab), dan tidak ada aktivitas log sama sekali. Saya masih tidak tahu apa yang bisa menjadi alasan untuk itu (tidak terlalu memperhatikannya tetapi jika ada yang tahu, beri tahu!), Tetapi saya menyelesaikannya dengan beralih ke browser default ubuntu. Berikut langkah-langkah pastinya, hampir sama dengan jawaban @Olivier Moindrot:

  1. Di server, mulai tensorboard: tensorboard --logdir=. --host=localhost --port=6006
  2. Di klien, buka terowongan ssh ssh -p 23 <USER>@<SERVER> -N -f -L localhost:16006:localhost:6006
  3. Buka ubuntu Browserdan kunjungi localhost:16006. Halaman tensorboard harus dimuat tanpa banyak penundaan.

Untuk memeriksa apakah terowongan SSH berfungsi secara efektif, server gema sederhana seperti skrip python ini dapat membantu:

  1. Masukkan skrip ke dalam <ECHO>.pyfile di server dan jalankan dengan python <ECHO>.py. Sekarang server akan mendengarkan skrip echo di 0.0.0.0:5555 .
  2. Di klien, buka terowongan ssh ssh -p <SSH_PORT> <USER>@<SERVER> -N -f -L localhost:12345:localhost:5555
  3. Pada klien, di terminal yang sama yang digunakan untuk membuka terowongan (langkah 2.), penerbitan telnet localhost 12345akan terhubung ke skrip gema yang berjalan di server. Mengetik hellodan menekan enter akan mencetak hellokembali. Jika demikian, tunnel SSH Anda berfungsi. Ini adalah kasus saya, dan membawa saya pada kesimpulan bahwa masalahnya melibatkan browser. Mencoba menyambung dari terminal lain menyebabkan terminal macet.

Seperti yang saya katakan, semoga membantu!
Salam,
Andres

fr_andres
sumber
Saya memiliki masalah yang sama persis pada chromium + ubuntu14, bahkan lebih buruk lagi, ini berfungsi dengan baik untuk port yang diteruskan dari satu komputer, tetapi menunjukkan halaman kosong yang sama (dengan favicon yang benar) untuk yang lain. Firefox berfungsi dengan baik. Masih tidak mengetahuinya, hanya menggunakan firefox sekarang.
LucasB
Ya, banyak faktor yang terlibat tetapi selama berhasil ... hal lain yang perlu diperhatikan adalah bahwa versi TB yang disertakan dengan TF berbeda dari versi TB mandiri yang dapat ditemukan di sini ... https://github.com/dmlc/tensorboardhanya untuk menambahkan lebih banyak alternatif ke mempersiapkan. Cheers
fr_andres
7

Anda dapat langsung menjalankan perintah berikut di terminal server jarak jauh Anda untuk menjalankan tensorboard:

tensorboard --logdir {tf_log directory path} --host "0.0.0.0" --port 6006

Atau Anda juga dapat memulai tensorboard dalam notebook ipython Anda:

%load_ext tensorboard
%tensorboard --logdir {tf_log directory path} --host "0.0.0.0" --port 6006
Devendra Soni
sumber
4

Anda harus membuat koneksi ssh menggunakan port forwarding:

ssh -L 16006:127.0.0.1:6006 user@host

Kemudian Anda menjalankan tensorboardperintah:

tensorboard --logdir=/path/to/logs

Kemudian Anda dapat dengan mudah mengakses tensorboarddi browser Anda di bawah:

localhost:16006/

sumber
3

--bind_all opsi berguna.

$ tensorboard --logdir runs --bind_all

Port akan secara otomatis dipilih dari 6006 secara bertahap. (6006, 6007, 6008 ...)

plhn
sumber
1

Untuk siapa saja yang harus menggunakan kunci ssh (untuk server perusahaan).

Tambahkan saja -i /.ssh/id_rsadi bagian akhir.

$ ssh -N -f -L localhost:8211:localhost:6007 myname@servername -i /.ssh/id_rsa

Aerin
sumber
0

Saat menjalankan tensorboard berikan satu opsi lagi --host = ip dari sistem Anda dan kemudian Anda dapat mengaksesnya dari sistem lain menggunakan http: // ip dari sistem host Anda : 6006

pengguna2973566
sumber
0

Pendekatan lain adalah dengan menggunakan proxy terbalik , yang memungkinkan Anda melihat Tensorboard dari perangkat apa pun yang terhubung ke internet tanpa SSHing . Pendekatan ini dapat membuat tampilan Tensorboard di perangkat seluler menjadi jauh lebih mudah / praktis, misalnya.

Langkah:

1) Unduh reverse proxy Ngrok di mesin remote hosting Tensorboard Anda. Lihat https://ngrok.com/download untuk instruksi (~ pengaturan 5 menit).

2) Jalankan ngrok http 6006(dengan asumsi Anda menghosting Tensorboard di port 6006)

3) Simpan URL yang dihasilkan ngrok:

masukkan deskripsi gambar di sini

4) Masukkan itu ke browser apa pun untuk melihat TensorBoard:

masukkan deskripsi gambar di sini

Terima kasih khusus kepada Sam Kirkiles

Andrew Schreiber
sumber