{"id":1115,"date":"2019-10-06T21:03:55","date_gmt":"2019-10-06T19:03:55","guid":{"rendered":"http:\/\/wchmurze.cloud\/?p=1115"},"modified":"2019-10-16T23:08:31","modified_gmt":"2019-10-16T21:08:31","slug":"wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim","status":"publish","type":"post","link":"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/","title":{"rendered":"Wujek Google ratuje wewn\u0119trznego Sknerusa przed wykr\u0119tami nauki uczenia g\u0142\u0119bokiego"},"content":{"rendered":"<p>Nieustanny rozw\u00f3j mocy obliczeniowej komputer\u00f3w osobistych, fizycznych serwer\u00f3w i wszelkiej ma\u015bci maszyn wirtualnych umieszczanych w chmurach prywatnych czy publicznych umo\u017cliwi\u0142\u00a0 testowanie i uruchamianie modeli uczenia maszynowego, kt\u00f3re do niedawna by\u0142y poza zasi\u0119giem przeci\u0119tnego fascynata sztucznej inteligencji. My\u015bl\u0119 o osobach, kt\u00f3re nie tylko chcia\u0142y z niej korzysta\u0107, ale r\u00f3wnie\u017c wnie\u015b\u0107 wk\u0142ad w praktyczne wykorzystanie lat do\u015bwiadcze\u0144 \u015brodowiska naukowego. Dotyczy to w szczeg\u00f3lno\u015bci uczenia g\u0142\u0119bokiego, kt\u00f3re jest podzbiorem algorytm\u00f3w uczenia maszynowego i jedn\u0105 z jego cech jest\u00a0 pazerno\u015b\u0107 na moc obliczeniow\u0105. G\u0142\u0119bokie sieci neuronowe sk\u0142adaj\u0105ce si\u0119 z wielu warstw ukrytych i setek tysi\u0119cy parametr\u00f3w (wag), kt\u00f3re podczas procesu uczenia s\u0105 wyznaczane iteracyjne wymagaj\u0105 mocy obliczeniowych. Standardowa jednostka CPU nie radzi sobie odpowiednio skutecznie. Ratunkiem jest wykorzystanie\u00a0 procesor\u00f3w graficznych GPU, kt\u00f3re pozwalaj\u0105 na sprawne przeprowadzanie operacji macierzowych i znacznie przy\u015bpieszaj\u0105\u00a0 czas oblicze\u0144. Przypomina mi si\u0119 moje pierwsze uruchomienie takiego modelu z wykorzystaniem laptopa biznesowego i jego 8-rdzeniowego procesora I7 drugiej generacji. Do tego momentu nie mia\u0142em \u015bwiadomo\u015bci, jakie wydaje d\u017awi\u0119ki to obci\u0105\u017cone urz\u0105dzenie. Sko\u0144czy\u0142o si\u0119 twardym restartem.<\/p>\n<p>W poprzednim <a href=\"http:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/\" target=\"_blank\" rel=\"noopener noreferrer\">wpisie\u00a0<\/a> m\u00f3wi\u0142em o sposobie pracy z p\u0142ytk\u0105 Jetson Nano, kt\u00f3ra jest takim odpowiednikiem Raspberry PI, ale ze sprz\u0119towym procesorem GPU, kt\u00f3ry mo\u017ce by\u0107 u\u017cyty np. przy wykorzystaniu silnika Tensorflow.\u00a0 Tak opisana konfiguracja\u00a0 jest niejako rozwi\u0105zaniem chmury prywatnej\u00a0\u00a0 serwuj\u0105cym us\u0142ug\u0119 <strong>GPU as a Service<\/strong>. WYmaga to oczywi\u015bcie zakupu urz\u0105dzenia i jego konfiguracj\u0119. Powsta\u0142o pytanie, czy da si\u0119 zbudowa\u0107 podobne rozwi\u0105zanie ale w chmurze publicznej? Takie ,kt\u00f3re pozwoli na uruchamianie skrypt\u00f3w j\u0119zyka Python z wykorzystaniem GPU i bez zu\u017cycia portfela naszego wewn\u0119trznego Sknerusa.<\/p>\n<p>Okaza\u0142\u0105 si\u0119 \u017ce jest taka us\u0142uga. Us\u0142uga <a href=\"https:\/\/colab.research.google.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Colab<\/a> firmy Google, pozwala ona mi\u0119dzy innymi wykorzysta\u0107 na g\u00f3ra 12h w jednej sesji kart\u0119 GPU <a href=\"https:\/\/www.nvidia.com\/en-gb\/data-center\/tesla-k80\/\" target=\"_blank\" rel=\"noopener noreferrer\">Nvidia Tesla K-80<\/a> .\u00a0 Dla zainteresowanych proponuj\u0119 poszuka\u0107 ile jest ona obecnie warta.<\/p>\n<p>Po uruchomieniu mamy do dyspozycji\u00a0 mo\u017cliwo\u015b\u0107 utworzenia notatnika<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-1118\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/intro.png\" alt=\"\" width=\"633\" height=\"426\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/intro.png 981w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/intro-300x202.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/intro-768x517.png 768w\" sizes=\"(max-width: 633px) 100vw, 633px\" \/><\/p>\n<p>Utw\u00f3rzmy prosty notatnik w j\u0119zyku Python 3, druga wersja tego j\u0119zyka jest nadal obs\u0142ugiwana, ale pami\u0119tajmy, \u017ce\u00a0 jest praktycznie na wymarciu i od 2020 roku nie b\u0119dzie rozwijana.<\/p>\n<p>Z menu Runtime wybieramy opcj\u0119 Change Runtime Type<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-1120\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/choose_GPU-1.png\" alt=\"\" width=\"360\" height=\"263\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/choose_GPU-1.png 500w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/choose_GPU-1-300x219.png 300w\" sizes=\"(max-width: 360px) 100vw, 360px\" \/><\/p>\n<p>Jest do dyspozycji te\u017c procesor TPU, ale o tym opowiem w innym wpisie. Na t\u0119 chwil\u0119 wybierzmy GPU. Po naci\u015bni\u0119ciu przycisku Save w tle zostanie pod\u0142\u0105czona maszyna wirtualna z gotowym oprogramowaniem. Sp\u00f3jrzmy na chwil\u0119 co tu mamy.<\/p>\n<p>W podkatalogu sample_data mamy kilka ma\u0142ych plik\u00f3w z klasycznymi przyk\u0142adami znanych zbior\u00f3w danych.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-1122\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/files.png\" alt=\"\" width=\"418\" height=\"366\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/files.png 418w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/files-300x263.png 300w\" sizes=\"(max-width: 418px) 100vw, 418px\" \/><\/p>\n<p>Zwracam uwag\u0119 na liczb\u0119 na dole. Mamy do dyspozycji\u00a0 ponad 300 GB wolnego miejsca, ale pami\u0119tajmy ze wszelkie dane jaki tam umie\u015bcimy s\u0105 ulotne i po wyga\u015bni\u0119ciu sesji 12 godzin nie b\u0119dziemy mie\u0107 do nich dost\u0119pu. Na szcz\u0119\u015bcie istnieje mo\u017cliwo\u015b\u0107 pod\u0142\u0105czenie Google drive, pobrania danych z\u00a0 zewn\u0119trznych \u017ar\u00f3de\u0142. Pami\u0119tajmy to tym, oszcz\u0119dzi nam to na przysz\u0142o\u015b\u0107 wiele rozczarowa\u0144. Dla os\u00f3b, kt\u00f3re rozpoczynaj\u0105 przygod\u0119 z us\u0142ugami w chmurach publicznych mo\u017ce si\u0119 to wydawa\u0107 na pocz\u0105tku ich wad\u0105, ale wbrew pozorom ma to swoje uzasadnienie.<\/p>\n<p>Celem naszego \u0107wiczenia jest wykorzystanie us\u0142ugi Colab jako klasycznej maszyny wirtualnej, na kt\u00f3rej mo\u017cemy instalowa\u0107 potrzebne nam oprogramowanie, za\u0142adowa\u0107 dane do uczenia i za\u0142adowa\u0107 skrypty z modelami.<\/p>\n<p>&nbsp;<\/p>\n<p>Na pocz\u0105tku zobaczmy co mamy tam pod spodem z poziomu notatnika:<\/p>\n<pre lang=\"BASH\">!nvidia-smi\r\n!\/usr\/local\/cuda\/bin\/nvcc --version\r\n<\/pre>\n<p>To co otrzymujemy na wyj\u015bciu to potwierdzenie, \u017ce mamy zainstlowane oprogramowanie do ob\u0142sugi naszej karty GPU.<\/p>\n<p>Znak ! na pocz\u0105tku oznacza wykonanie polecenia pow\u0142oki (linux) a nie instrukcji Pythona.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"\">Thu Oct 3 20:13:28 2019\r\n+-----------------------------------------------------------------------------+\r\n| NVIDIA-SMI 430.40 Driver Version: 418.67 CUDA Version: 10.1 |\r\n|-------------------------------+----------------------+----------------------+\r\n| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\r\n| Fan Temp Perf Pwr:Usage\/Cap| Memory-Usage | GPU-Util Compute M. |\r\n|===============================+======================+======================|\r\n| 0 Tesla K80 Off | 00000000:00:04.0 Off | 0 |\r\n| N\/A 49C P8 31W \/ 149W | 0MiB \/ 11441MiB | 0% Default |\r\n+-------------------------------+----------------------+----------------------+\r\n\r\n+-----------------------------------------------------------------------------+\r\n| Processes: GPU Memory |\r\n| GPU PID Type Process name Usage |\r\n|=============================================================================|\r\n| No running processes found |\r\n+-----------------------------------------------------------------------------+\r\nnvcc: NVIDIA (R) Cuda compiler driver\r\nCopyright (c) 2005-2018 NVIDIA Corporation\r\nBuilt on Sat_Aug_25_21:08:01_CDT_2018\r\nCuda compilation tools, release 10.0, V10.0.130\r\n<\/pre>\n<p>Zwracam uwag\u0119, \u017ce z pude\u0142ka\u00a0 nie mamy\u00a0 zgodno\u015bci wersji<\/p>\n<p>NVIDIA-SMI <strong>430.40<\/strong> Driver Version: <strong>418.67 .<br \/>\n<\/strong><\/p>\n<p>B\u0119dzie to poprawione w skrypcie wdra\u017caj\u0105cym oprogramowanie<\/p>\n<p>Zobaczmy czy silnik Tensorflow zauwa\u017ca urz\u0105dzenie GPU<\/p>\n<pre class=\"\" lang=\"PYTHON\">from tensorflow.python.client import device_lib \r\nprint(device_lib.list_local_devices())\r\n<\/pre>\n<pre class=\"\">[name: \"\/device:CPU:0\"\r\ndevice_type: \"CPU\"\r\nmemory_limit: 268435456\r\nlocality {\r\n}\r\n......\r\nincarnation: 2918730272762479116\r\nphysical_device_desc: \"device: XLA_GPU device\"\r\n, name: \"\/device:GPU:0\"\r\ndevice_type: \"GPU\"\r\nmemory_limit: 11330115994\r\nlocality {\r\n  bus_id: 1\r\n  links {\r\n  }\r\n}\r\nincarnation: 5961200144614956099\r\nphysical_device_desc: \"device: 0, name: Tesla K80, pci bus id: 0000:00:04.0, compute capability: 3.7\"\r\n]\r\n<\/pre>\n<p>Urz\u0105dzenie &#8220;<strong>\/device:GPU:0<\/strong>&#8221;\u00a0 jest widoczne jako jedyne tego typu i oznacza to pierwsz\u0105 kart\u0119 GPU (numerujemy od zera). Og\u00f3lnie istnieje mo\u017cliwo\u015b\u0107 korzystania z wielu kart GPU, ale ca\u0142y czas m\u00f3wimy tu o darmowym rozwi\u0105zaniu, kt\u00f3re ma oczywi\u015bcie swoje ograniczenia, ale nie a\u017c takie, by nie mo\u017cna z niego efektywnie korzysta\u0107.<\/p>\n<pre class=\"\" lang=\"BASH\">import tensorflow as tf \r\nprint(\"Tensorflow version :\",tf.__version__)\r\n<\/pre>\n<p>Zainstalowana jest wersja 1.14, ale istnieje mo\u017cliwo\u015b\u0107 instalacji wersji 2.<\/p>\n<pre class=\"\">Tensorflow version : 1.14.0<\/pre>\n<pre class=\"\" lang=\"BASH\">!uname -m &amp;&amp; cat \/etc\/*release\r\n<\/pre>\n<p>Jak wida\u0107 mamy do czynienia z Ubuntu w wersji 18.04 LTS.<\/p>\n<pre class=\"\">x86_64\r\nDISTRIB_ID=Ubuntu\r\nDISTRIB_RELEASE=18.04\r\nDISTRIB_CODENAME=bionic\r\nDISTRIB_DESCRIPTION=\"Ubuntu 18.04.3 LTS\"\r\nNAME=\"Ubuntu\"\r\nVERSION=\"18.04.3 LTS (Bionic Beaver)\"\r\nID=ubuntu\r\nID_LIKE=debian\r\nPRETTY_NAME=\"Ubuntu 18.04.3 LTS\"\r\nVERSION_ID=\"18.04\"\r\nHOME_URL=\"<a href=\"https:\/\/www.ubuntu.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/www.ubuntu.com\/<\/a>\"\r\nSUPPORT_URL=\"<a href=\"https:\/\/help.ubuntu.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/help.ubuntu.com\/<\/a>\"\r\nBUG_REPORT_URL=\"<a href=\"https:\/\/bugs.launchpad.net\/ubuntu\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/bugs.launchpad.net\/ubuntu\/<\/a>\"\r\nPRIVACY_POLICY_URL=\"<a href=\"https:\/\/www.ubuntu.com\/legal\/terms-and-policies\/privacy-policy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/www.ubuntu.com\/legal\/terms-and-policies\/privacy-policy<\/a>\"\r\nVERSION_CODENAME=bionic\r\nUBUNTU_CODENAME=bionic<\/pre>\n<pre class=\"\" lang=\"BASH\">print (\"Hard drive info\\n===========================\")\r\n!df -H \/\r\nprint (\"RAM info\\n===========================\")\r\n!free -h\r\nprint ( \"VM User info\\n===========================\")\r\n!whoami\r\n<\/pre>\n<p>Tu jest najwa\u017cniejsza informacja, zauwa\u017cmy ze pracujemy na koncie <strong>root<\/strong> tej maszyny. Wy\u017cszych uprawnie\u0144 nie mo\u017cna doda\u0107. Nie wiem do ko\u0144ca jaki by\u0142 zamys\u0142 tw\u00f3rcy us\u0142ugi.\u00a0 Dodatkowo mamy potwierdzenie,\u017ce\u00a0 dost\u0119pna przestrze\u0144 dyskowa to ponad 300 GB.<\/p>\n<pre class=\"\">Hard drive info\r\n===========================\r\nFilesystem      Size  Used Avail Use% Mounted on\r\noverlay         385G   33G  333G   9% \/\r\nRAM info\r\n===========================\r\n              total        used        free      shared  buff\/cache   available\r\nMem:            12G        713M          9G        2.9M        2.0G         11G\r\nSwap:            0B          0B          0B\r\nVM User info\r\n===========================\r\nroot<\/pre>\n<p>Mo\u017cemy jeszcze dowiedzi\u0107 si\u0119 o szczeg\u00f3\u0142ach informacji o pami\u0119ciu, procesorze<\/p>\n<pre class=\"\" lang=\"BASH\">!cat \/proc\/meminfo\r\n!cat \/proc\/cpuinfo\r\n<\/pre>\n<p>Pozostawiam to do wykonania dla zainteresowanych.<\/p>\n<p>W tym momencie zaczynamy w\u0142a\u015bciw\u0105 instalacj\u0119 oprogramowania.<br \/>\nKod skryptu umie\u015bci\u0142em w repozytorium Github.<\/p>\n<pre lang=\"BASH\">!if [ -d \"colab-examples\" ]; then rm -Rf colab-examples; fi\r\n\r\n!git clone https:\/\/github.com\/djkormo\/colab-examples.git\r\n<\/pre>\n<p>Po pobraniu danych mo\u017cemy podejrze\u0107 zawarto\u015b\u0107 skryptu<\/p>\n<pre lang=\"BASH\">!cat colab-examples\/ssh\/install.bash\r\n<\/pre>\n<p>Instalacja oprogramowania sprowadza si\u0119 do kilku czynno\u015bci.<br \/>\n1) Aktualizacja repozytori\u00f3w Ubuntu<br \/>\n2) Wymuszenie korzystania z Pythona w wersji 3 (Python 3.6.8). Domy\u015blnie jest to wersja 2.7.<br \/>\n3) Instalowane jest oprogramowanie konsolowe do monitoringu o nazwie nvtop<br \/>\n4) Instalacja sterownik\u00f3w Nvidia, tak by zachowa\u0107 zgodno\u015b\u0107 wersji CUDA z wersj\u0105 oprogramoania aplikacji.<br \/>\nWybra\u0142em wersje 418.87<\/p>\n<p><em>Ta cz\u0119\u015b\u0107 by\u0107 mo\u017ce nie wygl\u0105da zbyt elegancko, ale zosta\u0142a przetestowana wielokrotnie.<\/em><\/p>\n<p>5) Instalacja oprogramowania Jupyter notebook<\/p>\n<pre lang=\"BASH\">#!\/bin\/bash\r\nalias python='python3'\r\nalias pip='pip3'\r\n\r\nsudo apt-get install tmux tree net-tools -y \r\nsudo apt-get install  htop\r\nmkdir installs\r\ncd installs\r\n# installing nvtop for nvidia gpu monitoring \r\ngit clone https:\/\/github.com\/Syllo\/nvtop.git\r\nmkdir -p nvtop\/build &amp;&amp; cd nvtop\/build\r\ncmake ..\r\n\r\nmake    \r\nmake install # You may need sufficient permission for that (root)\r\ncd ..\r\nexport LD_PRELOAD=\/usr\/lib64-nvidia\/libnvidia-ml.so\r\n\r\n# updating repos for ubuntu \r\napt-get update\r\n\r\n# installing nvidia drivers\r\nwget https:\/\/developer.download.nvidia.com\/compute\/cuda\/repos\/ubuntu1804\/x86_64\/cuda-ubuntu1804.pin\r\nsudo mv cuda-ubuntu1804.pin \/etc\/apt\/preferences.d\/cuda-repository-pin-600\r\nwget http:\/\/developer.download.nvidia.com\/compute\/cuda\/10.1\/Prod\/local_installers\/cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb\r\nsudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb\r\nsudo apt-key add \/var\/cuda-repo-10-1-local-10.1.243-418.87.00\/7fa2af80.pub\r\nsudo apt-get update\r\nsudo apt-get -y install cuda -q\r\n\r\n# https:\/\/stackoverflow.com\/questions\/43022843\/nvidia-nvml-driver-library-version-mismatch\r\nsudo apt-get --purge remove \"*nvidia*\" -q\r\ndpkg -l | grep -i nvidia\r\napt-get update\r\nexport LD_PRELOAD=\/usr\/lib64-nvidia\/libnvidia-ml.so\r\nsudo apt install nvidia-driver-418 -q\r\nexport LD_PRELOAD=\/usr\/lib64-nvidia\/libnvidia-ml.so\r\n\r\npip install ipykernel\r\npip install jupyter notebook\r\n\r\n<\/pre>\n<p>Po instalacji oprogramowania,\u00a0 potrzebnego do wykorzystania GPU na tej maszynie (trwa ono oko\u0142o 6 minut)\u00a0 przysz\u0142a pora na zmian\u0119 konfiguracji sieciowej<\/p>\n<pre lang=\"BASH\">!ifconfig -a\r\n<\/pre>\n<pre>eth0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1500\r\n        inet 172.28.0.2  netmask 255.255.0.0  broadcast 172.28.255.255\r\n        ether 02:42:ac:1c:00:02  txqueuelen 0  (Ethernet)\r\n        RX packets 71856  bytes 1872302864 (1.8 GB)\r\n        RX errors 0  dropped 0  overruns 0  frame 0\r\n        TX packets 54119  bytes 3771107 (3.7 MB)\r\n        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0\r\n<\/pre>\n<p>Jak wida\u0107 mamy uruchomion\u0105 tylko adresacj\u0119 prywatn\u0105 172.16.0.1 \u2013 172.31.255.254<\/p>\n<p>Rozpoczynamy od instalacji us\u0142ugi SSH<\/p>\n<pre lang=\"PYTHON\">import random, string\r\n\r\npassword='Pa%%word2019.,'\r\n\r\ngenerate_password=True\r\n\r\nif (generate_password):\r\n  password = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(30))\r\n\r\n\r\n#Setup sshd\r\n! apt-get install -qq -o=Dpkg::Use-Pty=0 openssh-server pwgen &gt; \/dev\/null\r\n\r\n#Set root password\r\n! echo root:$password | chpasswd\r\n! mkdir -p \/var\/run\/sshd\r\n! echo \"PermitRootLogin yes\" &gt;&gt; \/etc\/ssh\/sshd_config\r\n! echo \"PasswordAuthentication yes\" &gt;&gt; \/etc\/ssh\/sshd_config\r\n! echo \"StrictHostKeyChecking no\" &gt;&gt; \/etc\/ssh\/sshd_config\r\n\r\nprint(\"username: root\")\r\nprint(\"password: \", password)\r\n\r\n#Run sshd\r\nget_ipython().system_raw('\/usr\/sbin\/sshd -D &amp;')\r\n<\/pre>\n<p>Przyk\u0142adowe informacje potrzebne do zalogowanie si\u0119 do maszyny to para (u\u017cytkownik\/has\u0142o). W skrypcie umie\u015bci\u0142em te\u017c statyczne has\u0142o, ale nie jest to polecania konfiguracja, stad generate_password=True i za ka\u017cdym razie mamy jego inn\u0105 warto\u015b\u0107. Dodatkowo, je\u015bli dobrze przyjrzymy si\u0119 skryptowi, to zauwa\u017cymy, \u017ce w\u0142\u0105czyli\u015bmy mo\u017cliwo\u015b\u0107 logowania si\u0119 przez SSH kontem root. Bezpiecze\u0144stwo rozwi\u0105zania nie jest g\u0142\u00f3wnym celem tej demonstracji, ale ka\u017cda zmiana, kt\u00f3ra spowoduje tak zwany hardening (utwardzenie), jest mile widziana. Piszcie \u015bmia\u0142o.<\/p>\n<p>Na wyj\u015bciu skryptu mamy:<\/p>\n<pre>username: root\r\npassword:  r79uhC4jXHfHvAIoe7jM1DNrihciln\r\n<\/pre>\n<p>Tworzymy tunel z maszyny wirtualnej. Wykorzystamy to tego celu darmowe rozwi\u0105zanie ngrok.<\/p>\n<pre lang=\"BASH\">! wget -q -c -nc https:\/\/bin.equinox.io\/c\/4VmDzA7iaHb\/ngrok-stable-linux-amd64.zip\r\n! unzip -qq -n ngrok-stable-linux-amd64.zip\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Logujemy si\u0119 na stron\u0119 https:\/\/dashboard.ngrok.com\/<\/p>\n<p>&nbsp;<\/p>\n<p>Pobieramy token<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-1128\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ngrok_token.png\" alt=\"\" width=\"1014\" height=\"347\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ngrok_token.png 1014w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ngrok_token-300x103.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ngrok_token-768x263.png 768w\" sizes=\"(max-width: 1014px) 100vw, 1014px\" \/><\/p>\n<p>Nie martwcie si\u0119, nie skorzystacie z niego, zosta\u0142 ju\u017c dawno przegenerowany.<\/p>\n<p>Zamiast zagl\u0105dania na stron\u0119 www mo\u017cemy r\u00f3wnie\u017c z poziomu skryptu podejrze\u0107 numer portu<\/p>\n<pre class=\"\" lang=\"PYTHON\"> ! curl -s http:\/\/localhost:4040\/api\/tunnels | python3 -c \\\r\n    \"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])\"\r\n<\/pre>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-1129\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ngrok_port.png\" alt=\"\" width=\"990\" height=\"366\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ngrok_port.png 990w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ngrok_port-300x111.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ngrok_port-768x284.png 768w\" sizes=\"(max-width: 990px) 100vw, 990px\" \/><\/p>\n<p>Do pe\u0142ni szcz\u0119\u015bcia brakuje\u00a0 jeszcze pod\u0142\u0105czenia z\u00a0 naszego komputera do Colaba.<\/p>\n<p>Wykorzystuj\u0105c popularny klient SSH jakim jest putty logujemy si\u0119 kontem root na nasz\u0105 maszyn\u0119:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-1130\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ngrok_port-1.png\" alt=\"\" width=\"466\" height=\"448\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ngrok_port-1.png 466w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ngrok_port-1-300x288.png 300w\" sizes=\"(max-width: 466px) 100vw, 466px\" \/><\/p>\n<p>Po zalogowaniu si\u0119 za pomoc\u0105 has\u0142a wygenerowanego poprzednio<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-1134\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ssh_colab_key.png\" alt=\"\" width=\"445\" height=\"304\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ssh_colab_key.png 445w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/ssh_colab_key-300x205.png 300w\" sizes=\"(max-width: 445px) 100vw, 445px\" \/><\/p>\n<p>Potwierdzamy dodanie klucza do naszego lokalnego rejestru i po chwili jeste\u015bmy wewn\u0105trz maszyny Colaba.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-1135\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_console_ssh.png\" alt=\"\" width=\"675\" height=\"424\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_console_ssh.png 675w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_console_ssh-300x188.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_console_ssh-80x50.png 80w\" sizes=\"(max-width: 675px) 100vw, 675px\" \/><\/p>\n<p>Po zalogowaniu si\u0119 uruchamiamy polecenie<\/p>\n<pre class=\"\">bash \/content\/colab-examples\/ssh\/run-tmux-jupyter.bash<\/pre>\n<p>I naszym oczom okazuje si\u0119 konsola podzielona na trzy cz\u0119\u015bci<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-1137\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_ssh_tmux.png\" alt=\"\" width=\"835\" height=\"552\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_ssh_tmux.png 835w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_ssh_tmux-300x198.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_ssh_tmux-768x508.png 768w\" sizes=\"(max-width: 835px) 100vw, 835px\" \/><\/p>\n<p>Mamy tu uruchomiony notatnik Jupytera, monitoring GPU i forwardowanie portu 8888 na nazw\u0119 publiczn\u0105.<\/p>\n<p><strong>myjupyter-lab.serveo.net<\/strong><\/p>\n<p>Dzi\u0119ki temu w\u00a0 oknie naszej przegl\u0105darki jest mo\u017cliwo\u015b\u0107 uruchamiania standardowych notatnik\u00f3w Jupytera.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-1138\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_ssh_jupyter.png\" alt=\"\" width=\"1168\" height=\"230\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_ssh_jupyter.png 1168w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_ssh_jupyter-300x59.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_ssh_jupyter-768x151.png 768w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/colab_ssh_jupyter-1024x202.png 1024w\" sizes=\"(max-width: 1168px) 100vw, 1168px\" \/><\/p>\n<p>Zawarto\u015b\u0107 pliku bash<\/p>\n<pre class=\"\" lang=\"BASH\">#!\/bin\/bash\r\n\r\n# based on https:\/\/stackoverflow.com\/questions\/5609192\/how-to-set-up-tmux-so-that-it-starts-up-with-specified-windows-opened\r\n\r\nexport LD_PRELOAD=\/usr\/lib64-nvidia\/libnvidia-ml.so\r\ntmux new-session -d 'jupyter notebook --ip 0.0.0.0 --NotebookApp.token='' --no-browser'\r\ntmux split-window -v 'ssh -R myjupyter-lab:80:localhost:8888 serveo.net StrictHostKeyChecking=no'\r\ntmux split-window -h 'nvtop'\r\n#tmux new-window 'nvtop'\r\ntmux -2 attach-session -d\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Mo\u017cna oczywi\u015bcie nie korzysta\u0107 z maszyny w ten spos\u00f3b. Notatniki Jupytera s\u0105 dobre do budowy prototyp\u00f3w. Trenowanie modelu mo\u017ce si\u0119 odbywa\u0107 w czystych skryptach j\u0119zyka Python. Co wi\u0119cej, nale\u017cy zapewni\u0107 cykliczn\u0105 synchronizacj\u0119 danych z Colaba np. na dysk Google. Dotyczy to w szczeg\u00f3lno\u015bci zapisanych modeli i ich wag. Pami\u0119tajmy o czasie jakiego potrzebuje sie\u0107 by si\u0119 trenowa\u0107. Proces trenowania powinien by\u0107 przystosowany do wznawiania w dowolnym momencie, ale tak by traci\u0107 dane co najwy\u017cej z ostatniej epoki.<\/p>\n<p>Szkic rozwi\u0105zania mo\u017cna\u00a0 opisa\u0107 w poni\u017cszy spos\u00f3b:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-1141\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/Colab_Diagram.png\" alt=\"\" width=\"622\" height=\"492\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/Colab_Diagram.png 622w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/Colab_Diagram-300x237.png 300w\" sizes=\"(max-width: 622px) 100vw, 622px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Wnioski<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>Opisana konfiguracja pozwala na wykorzystanie dost\u0119pu do darmowego GPU i maszyny wirtualnej z pe\u0142n\u0105 nad ni\u0105 kontrol\u0105. Dzi\u0119ki temu nasza podr\u00f3\u017c w poznawaniu algorytm\u00f3w uczenia g\u0142\u0119bokiego przez wykorzystanie np. bibliotek j\u0119zyka Python nie musi by\u0107 by\u0107 obarczona dodatkowym kosztem.<\/p>\n<p>Ale nie tylko. W planach mam zamiar zademonstrowa\u0107, jak wykorzysta\u0107 Colaba do nauki Apache Sparka.<\/p>\n<p>&nbsp;<\/p>\n<h4>Literatura<\/h4>\n<p><a href=\"https:\/\/imadelhanafi.com\/posts\/google_colal_server\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/imadelhanafi.com\/posts\/google_colal_server\/<\/a><\/p>\n<p><a href=\"https:\/\/gist.github.com\/yashkumaratri\/204755a85977586cebbb58dc971496da\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/gist.github.com\/yashkumaratri\/204755a85977586cebbb58dc971496da<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Kody \u017ar\u00f3d\u0142owe<\/p>\n<p><a href=\"https:\/\/github.com\/djkormo\/colab-examples\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/djkormo\/colab-examples<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Aplikacja do budowy wykres\u00f3w<\/p>\n<p><a href=\"https:\/\/www.draw.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.draw.io\/<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nieustanny rozw\u00f3j mocy obliczeniowej komputer\u00f3w osobistych, fizycznych serwer\u00f3w i wszelkiej ma\u015bci maszyn wirtualnych umieszczanych w chmurach prywatnych czy publicznych umo\u017cliwi\u0142\u00a0 testowanie i uruchamianie modeli uczenia maszynowego, kt\u00f3re do niedawna by\u0142y poza zasi\u0119giem przeci\u0119tnego fascynata sztucznej inteligencji. My\u015bl\u0119 o osobach, kt\u00f3re &hellip; <a href=\"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/\">Continued<\/a><\/p>\n","protected":false},"author":1,"featured_media":1146,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,17,3,6],"tags":[24],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Wujek Google ratuje wewn\u0119trznego Sknerusa przed wykr\u0119tami nauki uczenia g\u0142\u0119bokiego - W chmurze o chmurze i nie tylko<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wujek Google ratuje wewn\u0119trznego Sknerusa przed wykr\u0119tami nauki uczenia g\u0142\u0119bokiego - W chmurze o chmurze i nie tylko\" \/>\n<meta property=\"og:description\" content=\"Nieustanny rozw\u00f3j mocy obliczeniowej komputer\u00f3w osobistych, fizycznych serwer\u00f3w i wszelkiej ma\u015bci maszyn wirtualnych umieszczanych w chmurach prywatnych czy publicznych umo\u017cliwi\u0142\u00a0 testowanie i uruchamianie modeli uczenia maszynowego, kt\u00f3re do niedawna by\u0142y poza zasi\u0119giem przeci\u0119tnego fascynata sztucznej inteligencji. My\u015bl\u0119 o osobach, kt\u00f3re &hellip; Continued\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/\" \/>\n<meta property=\"og:site_name\" content=\"W chmurze o chmurze i nie tylko\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-06T19:03:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-10-16T21:08:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/deep_learning.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"884\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"djkormo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"djkormo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/\"},\"author\":{\"name\":\"djkormo\",\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"headline\":\"Wujek Google ratuje wewn\u0119trznego Sknerusa przed wykr\u0119tami nauki uczenia g\u0142\u0119bokiego\",\"datePublished\":\"2019-10-06T19:03:55+00:00\",\"dateModified\":\"2019-10-16T21:08:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/\"},\"wordCount\":1404,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"keywords\":[\"Colab\"],\"articleSection\":[\"chmura\",\"IaaS\",\"Machine Learning\",\"Python\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/\",\"url\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/\",\"name\":\"Wujek Google ratuje wewn\u0119trznego Sknerusa przed wykr\u0119tami nauki uczenia g\u0142\u0119bokiego - W chmurze o chmurze i nie tylko\",\"isPartOf\":{\"@id\":\"https:\/\/wchmurze.cloud\/#website\"},\"datePublished\":\"2019-10-06T19:03:55+00:00\",\"dateModified\":\"2019-10-16T21:08:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/wchmurze.cloud\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Wujek Google ratuje wewn\u0119trznego Sknerusa przed wykr\u0119tami nauki uczenia g\u0142\u0119bokiego\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wchmurze.cloud\/#website\",\"url\":\"https:\/\/wchmurze.cloud\/\",\"name\":\"W chmurze o chmurze i nie tylko\",\"description\":\"W chmurze o chmurze i nie tylko\",\"publisher\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wchmurze.cloud\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\",\"name\":\"djkormo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g\",\"caption\":\"djkormo\"},\"logo\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/wchmurze.cloud\/index.php\/author\/djkormo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Wujek Google ratuje wewn\u0119trznego Sknerusa przed wykr\u0119tami nauki uczenia g\u0142\u0119bokiego - W chmurze o chmurze i nie tylko","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/","og_locale":"pl_PL","og_type":"article","og_title":"Wujek Google ratuje wewn\u0119trznego Sknerusa przed wykr\u0119tami nauki uczenia g\u0142\u0119bokiego - W chmurze o chmurze i nie tylko","og_description":"Nieustanny rozw\u00f3j mocy obliczeniowej komputer\u00f3w osobistych, fizycznych serwer\u00f3w i wszelkiej ma\u015bci maszyn wirtualnych umieszczanych w chmurach prywatnych czy publicznych umo\u017cliwi\u0142\u00a0 testowanie i uruchamianie modeli uczenia maszynowego, kt\u00f3re do niedawna by\u0142y poza zasi\u0119giem przeci\u0119tnego fascynata sztucznej inteligencji. My\u015bl\u0119 o osobach, kt\u00f3re &hellip; Continued","og_url":"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/","og_site_name":"W chmurze o chmurze i nie tylko","article_published_time":"2019-10-06T19:03:55+00:00","article_modified_time":"2019-10-16T21:08:31+00:00","og_image":[{"width":1024,"height":884,"url":"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/10\/deep_learning.png","type":"image\/png"}],"author":"djkormo","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"djkormo","Szacowany czas czytania":"11 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/#article","isPartOf":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/"},"author":{"name":"djkormo","@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"headline":"Wujek Google ratuje wewn\u0119trznego Sknerusa przed wykr\u0119tami nauki uczenia g\u0142\u0119bokiego","datePublished":"2019-10-06T19:03:55+00:00","dateModified":"2019-10-16T21:08:31+00:00","mainEntityOfPage":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/"},"wordCount":1404,"commentCount":4,"publisher":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"keywords":["Colab"],"articleSection":["chmura","IaaS","Machine Learning","Python"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/","url":"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/","name":"Wujek Google ratuje wewn\u0119trznego Sknerusa przed wykr\u0119tami nauki uczenia g\u0142\u0119bokiego - W chmurze o chmurze i nie tylko","isPartOf":{"@id":"https:\/\/wchmurze.cloud\/#website"},"datePublished":"2019-10-06T19:03:55+00:00","dateModified":"2019-10-16T21:08:31+00:00","breadcrumb":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/10\/06\/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/wchmurze.cloud\/"},{"@type":"ListItem","position":2,"name":"Wujek Google ratuje wewn\u0119trznego Sknerusa przed wykr\u0119tami nauki uczenia g\u0142\u0119bokiego"}]},{"@type":"WebSite","@id":"https:\/\/wchmurze.cloud\/#website","url":"https:\/\/wchmurze.cloud\/","name":"W chmurze o chmurze i nie tylko","description":"W chmurze o chmurze i nie tylko","publisher":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wchmurze.cloud\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":["Person","Organization"],"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323","name":"djkormo","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g","caption":"djkormo"},"logo":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/"},"url":"https:\/\/wchmurze.cloud\/index.php\/author\/djkormo\/"}]}},"_links":{"self":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/1115"}],"collection":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/comments?post=1115"}],"version-history":[{"count":20,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/1115\/revisions"}],"predecessor-version":[{"id":1168,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/1115\/revisions\/1168"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/media\/1146"}],"wp:attachment":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/media?parent=1115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/categories?post=1115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/tags?post=1115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}