ฉันจะเรียกใช้ Tensorboard บนเซิร์ฟเวอร์ระยะไกลได้อย่างไร


116

ฉันยังใหม่กับ Tensorflow และจะได้รับประโยชน์อย่างมากจากการแสดงภาพสิ่งที่ฉันกำลังทำ ฉันเข้าใจว่า Tensorboard เป็นเครื่องมือสร้างภาพที่มีประโยชน์ แต่ฉันจะเรียกใช้งานบนเครื่อง Ubuntu ระยะไกลได้อย่างไร


วิธีแก้ปัญหาที่เป็นไปได้บางประการ: (1) อาจเหมือนกับการทำงานบนเครื่องท้องถิ่นแม้ว่าฉันจะไม่ได้ตรวจสอบสิ่งนี้: หลังจากที่คุณเรียกใช้แล้วระบบจะให้หมายเลขพอร์ตแก่คุณโดยที่คุณสามารถเข้าถึงได้จากเบราว์เซอร์ในพื้นที่ของคุณ เครื่อง. (2) คุณสามารถใช้ซอฟต์แวร์เดสก์ท็อประยะไกลเช่น RealVNC ได้หรือไม่? (3) ฉันถือว่าคุณรันการคำนวณเทนเซอร์โฟลว์บนเครื่องระยะไกลเครื่องเดียวกันด้วย คุณยังสามารถดาวน์โหลดไฟล์บันทึกลงในเครื่องของคุณและเรียกใช้ tenorboard บนเครื่องของคุณ
Yao Zhang

คำตอบ:


186

นี่คือสิ่งที่ฉันทำเพื่อหลีกเลี่ยงปัญหาในการทำให้เซิร์ฟเวอร์ระยะไกลยอมรับ IP ภายนอกภายในของคุณ:

  • เมื่อฉันเข้าสู่เครื่องฉันใช้ตัวเลือก-Lเพื่อถ่ายโอนพอร์ต6006ของเซิร์ฟเวอร์ระยะไกลไปยังพอร์ต16006ของเครื่องของฉัน (เช่น): ssh -L 16006:127.0.0.1:6006 olivier@my_server_ip

สิ่งที่มันไม่เป็นทุกอย่างในพอร์ตที่6006ของเซิร์ฟเวอร์ (ใน127.0.0.1:6006) จะได้รับการส่งต่อ16006ไปยังเครื่องของฉันในพอร์ต


  • จากนั้นคุณสามารถเปิดใช้เทนเซอร์บอร์ดบนเครื่องระยะไกลโดยใช้มาตรฐานที่tensorboard --logdir logมี6006พอร์ตเริ่มต้น
  • บนเครื่องของคุณไปที่http://127.0.0.1:16006และเพลิดเพลินกับ TensorBoard ระยะไกลของคุณ

1
ยังมีปัญหากับพล็อตเทนเซอร์บอร์ดที่เป็นสีดำทั้งหมดบน Safari มันทำงานบน Chrome (เกี่ยวข้องกับปัญหา# 4856 )
Olivier Moindrot

2
คำใบ้เล็ก ๆ : 127.0.0.1นี่คือip เครื่องในพื้นที่ของคุณดังนั้นคุณควรปล่อยไว้ตามที่เป็นอยู่ อย่าเปลี่ยนเป็นไอพีระยะไกลของคุณ ฉันเสียเวลาไป 10 นาทีกับเรื่องนี้ ฉันโง่แค่ไหน!
DarkZero

สิ่งนี้และการบังคับใช้ IPv4 ด้วย-4แฟล็ก ssh แก้ไขได้ เมื่ออ่านคำถามที่คล้ายกันหลายคนมีปัญหาเกี่ยวกับที่อยู่ IPv6 ในเซิร์ฟเวอร์ของตน
Robert Parcus

ดูเหมือนว่าฉันต้องอยู่ในเชลล์ ssh ถ้าฉันปิด ssh เชลล์จะไม่มีการตอบสนองจากเทนเซอร์บอร์ดระยะไกล มีวิธีเชื่อมต่อกับเทนเซอร์บอร์ดในขณะที่ปิด ssh shell หรือไม่?
แฟน

@Fan: ตรวจสอบคำตอบอื่น ๆดังต่อไปนี้ โดยพื้นฐานแล้วคุณสามารถเพิ่ม-Nแฟล็กเพื่อหลีกเลี่ยงการเปิด ssh เชลล์ การเพิ่ม-fทำให้การเชื่อมต่อ ssh อยู่เบื้องหลัง
Olivier Moindrot

78

คุณสามารถส่งต่อด้วยsshคำสั่งอื่นที่ไม่จำเป็นต้องเชื่อมโยงกับวิธีที่คุณเชื่อมต่อกับเซิร์ฟเวอร์ (เป็นทางเลือกแทนคำตอบอื่น) ดังนั้นการจัดลำดับขั้นตอนด้านล่างจึงเป็นไปโดยพลการ

  1. จากเครื่องในพื้นที่ของคุณให้เรียกใช้

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

  2. บนเครื่องระยะไกลให้รัน:

    tensorboard --logdir <path> --port 6006

  3. จากนั้นไปที่ (ในตัวอย่างนี้) http: // localhost: 16006บนเครื่องของคุณ

(คำอธิบายของคำสั่ง ssh:

-N : ไม่มีคำสั่งระยะไกล

-f : ใส่ ssh ในพื้นหลัง

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

ส่งต่อ<machine2>:<portB>(ขอบเขตระยะไกล) ไปยัง<machine1>:<portA>(ขอบเขตภายใน)


ตามที่ @ 0xcaff กล่าวไว้คุณควรฟังอินเทอร์เฟซอื่นของคุณแทน
mmohaveri

สำหรับพอร์ตเฉพาะ ssh -p PORTNUMBER -N -f -L localhost: 16006: localhost: 6006 <user @ remote>
Wey Shi

63

คุณไม่จำเป็นต้องทำอะไรแฟนซี เพียงแค่เรียกใช้:

tensorboard --host 0.0.0.0 <other args here>

และเชื่อมต่อกับ URL เซิร์ฟเวอร์และพอร์ตของคุณ คำสั่ง--host 0.0.0.0บอกให้ tensorflow ฟังจากการเชื่อมต่อบนที่อยู่ IPv4 ทั้งหมดบนเครื่องโลคัล


นี่น่าจะเป็นคำตอบที่ถูกต้อง .. ส่วนใหญ่แล้วเทนเซอร์บอร์ดไม่ได้ผูกไว้กับที่อยู่ที่บริการภายนอกมองเห็นได้
Duane

1
มันใช้ไม่ได้สำหรับฉันสำหรับเซิร์ฟเวอร์ระยะไกล ... ฉันขาดอะไรไป?
Idan azuri

หากคุณต้องการฟังเฉพาะ IP สาธารณะของคุณคุณสามารถทำได้: tensorboard --host $ (hostname -I) <other args here> จากนั้นคุณสามารถคัดลอกและวาง URL ที่ tensorboard พิมพ์ออกมา: TensorBoard 1.12.2 ที่10.0 .50.42: 6006 (กด CTRL + C เพื่อออก)
Morten

1
@Idanazuri คุณมีการเข้าถึง http ไปยังเครื่องระยะไกลของคุณหรือไม่หรือมีกำแพงไฟ (เช่น: เข้าถึงได้ผ่านการเชื่อมต่อ ssh เท่านั้น)? หากเป็น ssh เท่านั้นคำตอบนี้จะไม่เหมาะกับคุณ
drevicko

17

อีกทางเลือกหนึ่งหากคุณไม่สามารถใช้งานได้ด้วยเหตุผลบางประการคือเพียงแค่เมานต์ไดเร็กทอรี logdir บนระบบไฟล์ของคุณด้วย sshfs:

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

จากนั้นเรียกใช้ Tensorboard ในเครื่อง


10
  1. ค้นหาIP ภายนอกภายในเครื่องของคุณโดย googling "whats my ip"หรือป้อนคำสั่งนี้:wget http://ipinfo.io/ip -qO -
  2. กำหนดไฟล์ IP ภายนอกระยะไกลนี่อาจเป็นสิ่งที่เกิดขึ้นหลังชื่อผู้ใช้ของคุณเมื่อ ssh-ing เข้าสู่เซิร์ฟเวอร์ระยะไกล คุณสามารถwget http://ipinfo.io/ip -qO -อีกครั้งจากที่นั่นได้เช่นกัน
  3. รักษาความปลอดภัยทราฟฟิกเซิร์ฟเวอร์ระยะไกลของคุณเพื่อยอมรับไฟล์ ที่อยู่ IP ภายนอกในเครื่อง
  4. เรียกใช้ Tensorboard สังเกตว่าพอร์ตมีค่าเริ่มต้นเป็น:6006
  5. ป้อนที่อยู่ IP ภายนอกระยะไกลของคุณลงในเบราว์เซอร์ของคุณตามด้วยพอร์ต:123.123.12.32:6006

หากเซิร์ฟเวอร์ระยะไกลของคุณเปิดให้มีการรับส่งข้อมูลจากที่อยู่ IP ในพื้นที่ของคุณคุณควรจะเห็น Tensorboard ระยะไกลของคุณ

คำเตือน : หากการรับส่งข้อมูลทางอินเทอร์เน็ตทั้งหมดสามารถเข้าถึงระบบของคุณได้ (หากคุณไม่ได้ระบุที่อยู่ IP เดียวที่สามารถเข้าถึงได้) ทุกคนอาจสามารถดูผลลัพธ์ TensorBoard ของคุณและหลีกหนีจากการสร้าง SkyNet ด้วยตนเอง


7

นี่ไม่ใช่คำตอบที่ถูกต้อง แต่เป็นเครื่องมือแก้ปัญหาหวังว่าจะช่วยให้เครือข่ายมืออาชีพอื่น ๆ เช่นฉัน

ในกรณีของฉัน (firefox + ubuntu16) เบราว์เซอร์กำลังเชื่อมต่อ แต่แสดงหน้าว่าง (พร้อมโลโก้เทนเซอร์บอร์ดบนแท็บ) และไม่มีการแสดงกิจกรรมการบันทึกเลย ฉันยังไม่รู้ว่าอะไรเป็นสาเหตุของสิ่งนั้น (ไม่ได้ดูมาก แต่ถ้าใครรู้โปรดแจ้งให้ทราบ!) แต่ฉันแก้ไขได้โดยเปลี่ยนเป็นเบราว์เซอร์เริ่มต้นของ ubuntu นี่คือขั้นตอนที่แน่นอนเหมือนกับในคำตอบของ @Olivier Moindrot:

  1. บนเซิร์ฟเวอร์เริ่มต้นเทนเซอร์บอร์ด: tensorboard --logdir=. --host=localhost --port=6006
  2. บนไคลเอนต์เปิดอุโมงค์ ssh ssh -p 23 <USER>@<SERVER> -N -f -L localhost:16006:localhost:6006
  3. เปิดอูบุนตูของและการเยี่ยมชมBrowser localhost:16006หน้าเทนเซอร์บอร์ดควรโหลดโดยไม่ล่าช้ามาก

เพื่อตรวจสอบว่า SSH tunnel ทำงานได้อย่างมีประสิทธิภาพเซิร์ฟเวอร์ echo แบบธรรมดาเช่นสคริปต์ pythonสามารถช่วยได้:

  1. ใส่สคริปต์ลงใน<ECHO>.pyไฟล์ในเซิร์ฟเวอร์และเรียกใช้ด้วยpython <ECHO>.py. ตอนนี้เซิร์ฟเวอร์จะมีการฟังสคริปต์ echo ใน0.0.0.0:5555 0.0.0.0:5555
  2. บนไคลเอนต์เปิดอุโมงค์ ssh ssh -p <SSH_PORT> <USER>@<SERVER> -N -f -L localhost:12345:localhost:5555
  3. บนไคลเอนต์ในเทอร์มินัลเดียวกับที่ใช้เปิดทันเนล (ขั้นตอนที่ 2) การออกtelnet localhost 12345จะเชื่อมต่อกับสคริปต์ก้องที่ทำงานในเซิร์ฟเวอร์ การพิมพ์helloและกด Enter ควรพิมพ์helloกลับ หากเป็นเช่นนั้นแสดงว่าอุโมงค์ SSH ของคุณใช้งานได้ นี่เป็นกรณีของฉันและนำฉันไปสู่ข้อสรุปว่าปัญหาเกี่ยวข้องกับเบราว์เซอร์ การพยายามเชื่อมต่อจากเทอร์มินัลอื่นทำให้เทอร์มินัลค้าง

อย่างที่บอกหวังว่ามันจะช่วยได้!
ไชโย
Andres


ฉันมีปัญหาเดียวกันกับโครเมียม + ubuntu14 ที่แย่กว่านั้นคือมันทำงานได้ดีอย่างสมบูรณ์สำหรับพอร์ตที่ส่งต่อจากคอมพิวเตอร์เครื่องหนึ่ง แต่แสดงหน้าว่างเดียวกัน (พร้อมไอคอน Fav ที่ถูกต้อง) สำหรับอีกเครื่องหนึ่ง Firefox ทำงานได้ดี ยังคิดไม่ออกเพิ่งใช้ firefox ตอนนี้
LucasB

ใช่มีหลายปัจจัยที่เกี่ยวข้อง แต่ตราบใดที่ใช้งานได้ ... สิ่งที่ควรทราบอีกประการหนึ่งคือเวอร์ชัน TB ที่มาพร้อมกับ TF นั้นแตกต่างจาก TB-standalone ที่พบได้ที่นี่ ... https://github.com/dmlc/tensorboardเพียงเพื่อเพิ่มทางเลือกอื่น ๆ ให้กับ ติดตั้ง. ไชโย
fr_andres

7

คุณสามารถรันคำสั่งต่อไปนี้โดยตรงบนเทอร์มินัลของเซิร์ฟเวอร์ระยะไกลของคุณเพื่อเรียกใช้เทนเซอร์บอร์ด:

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

หรือคุณสามารถเริ่มต้นเทนเซอร์บอร์ดภายในโน้ตบุ๊ก ipython ของคุณ:

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

4

คุณต้องสร้างการเชื่อมต่อ ssh โดยใช้การส่งต่อพอร์ต:

ssh -L 16006:127.0.0.1:6006 user@host

จากนั้นคุณเรียกใช้tensorboardคำสั่ง:

tensorboard --logdir=/path/to/logs

จากนั้นคุณสามารถเข้าถึงได้อย่างง่ายดายtensorboardในเบราว์เซอร์ของคุณภายใต้:

localhost:16006/

3

--bind_all ตัวเลือกมีประโยชน์

$ tensorboard --logdir runs --bind_all

พอร์ตจะถูกเลือกโดยอัตโนมัติจาก 6006 ทีละน้อย (6006, 6007, 6008 ... )


1

สำหรับใครก็ตามที่ต้องใช้คีย์ ssh (สำหรับเซิร์ฟเวอร์ขององค์กร)

เพียงเพิ่ม-i /.ssh/id_rsaในตอนท้าย

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


0

ในขณะที่เรียกใช้ tensorboard ให้เพิ่มอีกหนึ่งตัวเลือก --host = ip ของระบบของคุณจากนั้นคุณสามารถเข้าถึงได้จากระบบอื่นโดยใช้ http: // ip ของระบบโฮสต์ของคุณ : 6006


0

อีกวิธีหนึ่งคือการใช้reverse proxyซึ่งช่วยให้คุณดู Tensorboard จากอุปกรณ์ที่เชื่อมต่ออินเทอร์เน็ตโดยไม่ต้องใช้ SSHingSSHing วิธีนี้ช่วยให้ดู Tensorboard บนอุปกรณ์มือถือได้ง่ายขึ้น / เข้าถึงได้ง่ายขึ้น

ขั้นตอน:

1) ดาวน์โหลด reverse proxy Ngrok บนเครื่องระยะไกลที่โฮสต์ Tensorboard ดูhttps://ngrok.com/downloadสำหรับคำแนะนำ (ตั้งค่าประมาณ 5 นาที)

2) เรียกใช้ ngrok http 6006 (สมมติว่าคุณกำลังโฮสต์ Tensorboard บนพอร์ต 6006)

3) บันทึก URL ที่เอาท์พุท ngrok:

ใส่คำอธิบายภาพที่นี่

4) ป้อนลงในเบราว์เซอร์ใดก็ได้เพื่อดู TensorBoard:

ใส่คำอธิบายภาพที่นี่

ขอขอบคุณเป็นพิเศษสำหรับSam Kirkiles

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.