Introduction to Spell (for Machine Learning in the Cloud)


(bell rings) – Hello, welcome to a new video series. I’m very excited about this video series ’cause I’m going to show
you how to write some code. I always show you how to
write code, well, not always, but typically I show
you how to write code, and then I run the code
on this computer here. And what I’m going to show
you is how to write code here and have it run somewhere else. And this can be very useful
for a lot of reasons. One of the main reasons these
days you might want to do that is to run your code on
a more powerful computer that can do some kind
of machine learning task that might take all night, and you can just be playing your whatever other video game and checking your email while that’s going and get the results when it’s done. And I’m going to show you how to do this with a particular platform called Spell. And this video is sponsored by Spell. So I’m going to do a couple things. I’m going to talk about what is Spell. I’m going to show you how to use it and I’m going to run a simple example with just one little Python script that I make on this computer, run it over there and see the results. Then look in this video’s description, there will be links to two upcoming live streams with two guests. First, Nabil Hassein is going to come and show you how to train an LSTM, Long Short-Term Memory network. It’s a special kind of
neural network model that’s useful for working with sequences, and in particular you could generate text as a sequence of characters with it. So we’re going to look at how to train an LSTM
model using spell.run, and then have that model
that you’ve trained work with, say, the ML5
TensorFlow.js library, an ML5 or a TensorFlow.js library. Then Yining Shi, who has previously appeared on The Coding Train in the Brick Breaker Tutorial, she’s going to come and show you some stuff about working with images, maybe we’ll do style transfer, maybe we’ll do Pix 2 Pix, maybe both. And so she’ll come and show
you how to train a model for those concepts and
execute that on Spell, and then also work with that
with the ML5.js library. So you could check the video’s description for the times of both those live streams. You can tune in live
and ask your questions, or simply watch if the live
streams have already happened and you’re watching this
video, just click the link, and you’ll be able to
watch it right there. Okay wonderful. Alright so first, let’s talk about what is Spell. So I’ve talked about the idea of client side programming and server side programming, and this is sort of a similar thing in the sense that we do
have a client computer, my laptop which is like The Coding Train, then there is this service
which is called Spell, if I could spell Spell,
that would be good, which has lots and lots of computers sitting there somewhere in the cloud. They have computers with
different CPUs, GPUs, and I’ll kind of get to that as we go through all this material. So typically if I’m talking
about client server, I might be saying you
program your website, then you upload your
website to some server and then other people
can access your website. This is different. What we’re talking about is allowing these computers to act as a cloud computing resource essentially that you can write a script, so maybe you have this Python script, you set up your entire Python
environment on your computer, the Python script works with
it and you can just say, with typing in just the instruction, spell run my script.py. This will get sent to a particular server, one that you’ve requested, the kind of server you’ve requested, you’re not requesting a specific computer, you’re requesting the kind
of computer, I want this GPU. GPU by the way means
Graphics Processing Unit, and that typically is a powerful processor that’s really useful with
machine learning models. So you’re going to request a
particular kind of computer. It’s going to run it, it might finish, it might generate some files, like maybe it’s going to say, hey here’s your poem, or here’s your image. And then you could request to ask for the results back. And if that task takes hours or even days which is not crazy at all in the world of running machine learning models, you can send it, close your computer, check, go to the library, get on the computer there, go to the Spell website, see what the progress is, go to sleep, wake up, check the progress, did I get a notification? All sorts of things are
possible when it’s done. So this is exactly what
I want to show you. And in case you’re following along, this is my kind of mental
list of all the pieces, a little outline of what I’m showing. So really all I’ve done so far is talk about what is Spell. The next thing I want
to do is install Spell. Okay so the first thing that I want to do is just go right to the spell.run website. I’ll link to it in this
video’s description, but it’s pretty easy to type
it in right to your browser. The next thing you’re going
to want to do is click Sign Up and sign up for an account
with your email address, name and email. I already have done that so
I’m just going to log in. You pause this video and
sign up for an account if you want to follow along. And then I’m now logged in, and you’ll notice I’m
getting this message, Spell is offering a $100 GPU credit, meaning you can use their
GPU machines for free up to what would normally cost $100. You’ll have to enter a credit card on the billing page to unlock that feature, and afterwards there’s a charge per hour using the resources. I will note that they have a good notification system set up so you can set it up to warn you whenever you’re down to this much, so you should never see any unexpected charges on your card. Okay so once you’re signed up, the first thing you
want to do is type this, pip install spell. That is now where do you type that? So one thing I should mention is there are couple prerequisites for this following along this tutorial. One is you’re going to need
to have a Python environment. Most computers kind of
come with Python installed or you can install it, and I’ll link to a few resources for installing Python. I’m using a particular tool in this video called virtualenv, virtual environment, that lets me create a Python environment that I can kind of like
turn on and turn off. Useful. You’re also going to need
to know something about Git, how Git works in order to work with Spell. And I will also link, I mean I have a video tutorial series about Git and GitHub as well which I will link to you, but those are prerequisites. Once you have a Python environment set up, you should be able to go
to any terminal, console, application that you’re
using and type in pip, Python package something
rather install spell. So I’m going to go to, I’m using iTerm, and you can see that I’m on the Desktop, and this spell-demo, this is a message that’s showing to me that’s
part of virtual environment, so I have my spell.demo
virtual environment set up, and so I can just write pip install spell, and then I can wait, dot dot,
dot dot, oh, that was so fast, and it is installed. And I know it’s installed
because now if I type spell, we can see that it’s,
something is happening. Normally if I would just
type spell into the console, into the terminal, it would
say I don’t know what that is. Okay the next thing I want
to do is actually log in. So what I’ve done, actually
let me say something, what I’ve done is I’ve installed, I just have to come over
here just to write this down, a command line interface. So how do you control Spell? There are two ways to control Spell. One is through their web browser interface which I will show you at some point. Another is through a
command line interface, meaning you can type in commands on the command line on your computer to interface with Spell and control it. And every command is
going to start with spell. And now I’m going to say spell login. And I’m going to put in my username, and I’m going to put in
my password, sillyunicorn. And there it is, it says, Hello, danshiff! So I know that I am logged in now. And I can also do things
like, say, spell whoami, just to check like who did I log in as? And you can see, okay,
there’s my username, you can all email me now at
[email protected], and you can see when my account
was created, June 1st 2001, and my last log in was 10 seconds ago ’cause I log in a lot apparently. Alright so we have Spell working. This is actually pretty easy. Now I can do stuff. So I could type spell, anything that I can run
on the command line, for example I could type echo Choo! Choo! Echo is a command for the computer to echo back to me whatever I type after echo. So now if I want this
command echo Choo! Choo! to not run on my computer
but to run on Spell, all I have to do is say
spell run echo Choo! Choo! And here we go. Now it’s going to take longer. Oh whoa, oh so first of all, ah, this is very important, I’m very glad that this happened, because I meant to mention this. Spell, as I was saying, you need to know something about Git which is version control software. Spell is designed to work
best when you run commands from within a directory
that is a Git repository. At the moment I don’t
need to worry about that. I’m just trying to say Choo! Choo! So I’m just going to say continue anyway. And then of course in a moment, I’m going to run the commands
from a Git repository. So you could see it’s
casting spell number nine. This is the ninth time I’ve ever tried to run something on Spell. A machine request is done, it’s building, it ran, it’s that Choo! Choo! It’s saving, pushing, total run time five seconds, complete. So here’s the thing. This took almost six seconds to run, whereas if I just did this, it happens in milliseconds. There is overhead in
communicating with the server, requesting a machine, sending the command, running the command,
getting the message back, but all that overhead is totally worth it when you have to run something that you need a powerful GPU that doesn’t exist on your laptop or that just is going to take, it doesn’t matter if
you’re adding five seconds if it’s going to take five hours. So next step, let’s actually
have it run some code. So I have already, I’m in a directory called
Coding-Train-Spell-Demo. And this is code band.py. It’s a Python script. I actually wrote a Python script sort of. This is borrowed from a
tutorial from Allison Parrish, and I will link to that in
the video’s description. But this, what this does
is it loads a JSON file, this is important because
I want to show you something about loading data, it loads a JSON file with some data in it, it picks some random stuff out, and then it spits that stuff
back out to a text file. So for example, if I just
were to say python band.p, this is me running the
Python script on this laptop, what it does is it picks a
set of random instruments and shows them to you. We run them through again, it picks 10 random
instruments and there you go. It’s my random band, the randoms. And it’s also in a file
called theband.txt. It wrote it out to a file. Well, I’m not suggesting that this particular code is anything interesting. This shows you the
machine learning process if you’re going to use
this for machine learning. You don’t have, you can
run any code on Spell, and there might be other things, but the thing that I’m
going to show you with, that we’re going to show you in future live streams with guests, LSTM, style transfer, the idea is that you’re going to load in some data, crunch the numbers for a very long time, and then spit out a result, and that’s exactly what this is doing, loading a JSON file, running over sort of an algorithm, and writing out a text file. So maybe that output is going to be a model file or an
image or something else, but all the same stuff will apply. It’s time to run span.py
now on Spell, not locally. So I’m going to ask the Spell
server to run that Python script. So all I have to do is type spell run, and then the same as that command that I would have typed anyway, python band.py. Now here’s the thing, this is going to work very fluidly because I am in a directory that happens to be a Git repository. Spell knows how to transfer
files back and forth using Git, how to look at your last commit method and have that be as
something that’s noted, at what time did you run this. So all of that, if you have your script inside of a Git repository, things are going to work really nicely. And you could see that I have my terminal configured in such a way
to show me information about what branch I’m on
and into my Git repository. And I have a separate video that kind of shows how I’m doing that which I’ll link to in
the video’s description. Okay I’m going to press
Enter and run this. Okay so here we are. It’s casting spell number 11. It was spell number nine before because I did something that I made a mistake with number 10. It got edited out. Okay, so you could see it’s building it, it’s running it, it’s done, it’s printed out the output, saving, done, and run
number 11 is complete. Now that it’s finished, I want to be able to look at the results. I want to see the results
of whatever algorithm I ran. I can see it here ’cause I had
it kind of console logged it, but I want that file, that
file is not on my computer. Remember I ran the code
on Spell’s computers, so I need to get that file. And there’s two different
ways you can do it. So one way you can do it is actually just by going to the browser. So here I am logged in to Spell. I’m going to go here and click Runs. There’s also this idea of Workspaces, but Runs is where I can see all the different things that I have done recently, and I want to find one number 11. So I’m going to click on Runs, and I’m going to click
on run number 11 here. And here we could see, look,
this is actually what ran, spell run, now I didn’t type this in, I didn’t request a CPU machine, the default is the basic CPU machine, meaning no special fancy
graphics processing units. And this is actually free. So the basic computer, it’s not going to do anything much better than I could do already on
my laptop but that is free. And then you can see python band.py. There’s information that’s sort of log of what happened is here. And then right here, look at this, theband.txt, that was the output, and I can just click Download, and there it is. I’ve already done this in practice. And you can see there it is, that’s the results. So in a way (bell rings) we’re done. Like I’m going to show you more things, but this is the basic idea of Spell. I wrote some code, I have an environment
configured on my computer, I don’t want to have to do, I want to run it somewhere else but I don’t want to have to do a lot of work setting
up another environment, Spell is going to be able to
duplicate your environment and run your code very easily by using Git and other things that it
knows how to integrate with. So this is really wonderful that I have this like web interface and I can see what happened, I can click through my runs, I can see band.txt, I can just download it really easily. But most of the time you’re going to want to just continue all of your workflow through that command line interface, and in fact you can download the file and do a lot of other things from the command line interface. I’m going to show you
a couple more commands, and then I’m also going to show you where you find all the documentation
for all those commands. I actually don’t have
these things memorized, you shouldn’t have them either memorized, it’s all about looking up and reading through the documentation. Okay so let me go back to the terminal. So one thing I’m just in the Desktop now. I don’t have to be in my project folder to interface with Spell. If I’m running the code, I want to be in the project folder, but if I just want a file, I could say something like spell, cp for copy, runs, and then I need to specify which run. Now the number of the run is
the most important thing, /11. It was run number 11 I remember that. And so it’s going to say copied one file. I can actually go to the Desktop now, and we should see that there it is, there’s this file, the band.txt, and there once again is the band that came out of that particular run. Let’s just really quickly do this again to see how everything changes. I’m going to run it one more time. (soft upbeat music) Okay, run number 12 completed. You could see it’s a different band, fiddle all the way to oboe. So I could just go back
to Desktop and say hey, give me now the file from run 12, and then I could just go to the Desktop, and we can say, right,
fiddle down to oboe, the new file has come in and replaced it. It’s up to me to manage my file system if I want to like rename the other one, keep that one, that sort of thing. But all of this has been saved, I can just go quickly back and grab the file for
number 11 now if I wanted. It’s all there on the
Spell server for you. So the next thing I want to
show you which is pretty typical of working with a machine
learning algorithm is that your data might
be a big set of images or a lot of text files, that’s not going to be something that’s part of your Git repo. Your code and your algorithm is all there, but the actual data is something that you want to treat separately. And this is where you want to use two important commands, right? So before, I just had
my instruments.JSON file right there in the repo so my
Python code could pull it up, but if I want to just have
my code running on Spell, but try with different data files, I’m going to need to upload the file, so I’m going to use spell upload. And then what I want to make sure is that, that’s uploading it to Spell, but there’s another
concept here of mounting. So if I have a whole set of uploads, I want to mount a particular one, meaning I want it to be available for this particular run. So let’s look at how that works. To show you how that works, I’ve modified the code to have it just pull from any text file. So when I run, when I
now say python band.py, I have to give it a data file. So I can say data.json. And data.json is not part
of my Git repository, it’s just a data file. So what I want to do first is actually say spell upload data.json. Enter a name for the upload. Ah, so actually it’s important
that I reference a name because I want to like organize my stuff in a way that I can remember later. So now it’s going to
tell me let’s call it, let’s just call it a demo, maybe I want to call it, actually let me call it like json_bands, like band or band, I’ll call it bands or instruments. (laughing) Let’s call it instruments. Okay so now you can see it’s uploading it to uploading instruments. Let’s go to the Spell website. And when I look at the website, I can now go to Resources, and we’re going to see here, look at this, under uploads, instruments, there’s my resource, data.json. So now I need to make sure this resource is available, right? Like is it available just by default? Now I can say spell run python band.py data.json, and it’s going to run it. Casting spell number 14, building machine, running, running, ah, it couldn’t find the file. See, it threw an error, open file name, it couldn’t find this file
that I want, data.json. To add that file, for it to be available as part of the run, it needs to be mounted. And this can be done
actually by just modifying with an argument the spell run command. So in other words I want to say spell run, and all this time I should have been putting the command in quotes ’cause it’s going to like
keep it together as a unit. So I can say python band.py data.json, and then -m, and now the path to that, and the path to that is what? uploads, what did I call it? instruments I think, instruments/data.json. So if I had a bunch of
different instruments files, I could run it just by picking the one that I want to mount
for this particular run. So let’s give this a try, and this is a very common thing, this -m, there’s lots of other dash this, dash that, dash this, so that I can modify, I can request a GPU or
I can ask it do this. So I’ll look at that when I show you the documentation. Okay let’s give it a try. Oh we’re in number 15,
this is so exciting. Machine requested, mounting, run is mounting, run is
running, there we go. So we can see it worked. Now it used that file. Oh that’s wonderful. I’ve kind of finished. I mean there’s so much more, and as I said there’s going to be two upcoming live streams. We’re showing practical
machine learning examples that you could stay tune for or watch if you’re watching this
sometime in the future when those have already happened. But I do want to mention
a couple other things. So let’s actually let’s
run this on a GPU, why not? Let’s make use of a powerful GPU. I’ve got $100 in credit. So let’s go here and see, how do you find out all
the things you can do? The main thing you want to go to is here under Documentation. So I’m going to click Documentation. There’s a Quickstart guide. Essentially the Quickstart guide is what is in this video. No more as succinct fact fashion. There’s some Core Concepts, there’s Guides for particular examples like style transfer already, translating text, recognizing numbers. I encourage you to look at those. But what I’m really
concerned with right now is this Command Line
Interface Documentation. That’s what I really want to look at. So I’m going to go there and you can see this is all the stuff that
I’ve been showing you, spell whoami, spell upload, spell stop, spell ps, this is a really useful one. So spell ps display all
user runs and their details. Because one thing by
the way you should know, you might sort of think like,
oh I’m going to just run this, and then like, oh no, I
didn’t mean to do that, let me quickly hit Control + Z. Well, guess what I just did? I stopped viewing logs with Control + Z. That didn’t actually stopped the process. If I want to stop the process, I’ve got to actually
use probably spell.stop. And spell.stop, I can
stop a particular RUN_ID if it’s like taking forever
and it has a mistake in it. That one probably already
finished ’cause I was talking, but I could say spell -ps. Oh sorry, just spell ps, no dash. And now this is everything
I’ve ever done basically. You could see back like when
I first was doing this thing, I was running some test spell test. It’s always telling me the
machine type, what the thing was. This is a little bit awkward
to look at because of, it’ll look really nice on your computer especially when you
have like a smaller font and like it’s all nice. It’ll look something
nice like this (laughs) but I have like a big
font so you can see it, and I don’t know I’m like,
my computer has gone crazy. But this is the kind of thing
that you want to look how to do. So the one thing that you’re
going to want to really see is I’m looking for, oh, spell.run, and now the arguments for it. So we could see that -m was for mounting, and then also, ah, this is
really important, –pip, this is if a certain dependency that, my project was just like a simple one so it didn’t really need any dependency, but this is important so
that when Spell runs it, it uses the same Python
packages that you’re running. And by the way Spell also
supports other environments. I’m using Python ’cause
the future examples and a lot of machine learning
examples run through Python. But you know me, I don’t
really know Python, and maybe I’ll come back and
show you with JavaScript thing, with node, all these other environment, other environments are
supported on Spell as well, but here’s the important
one, –machine-type or -t. And you can see these are
the different machine types. Probably the further you get to the right is kind of the bigger the one. And you’re going to want to
look through the Spell website for more documentation
on each one of these. But let’s just pick one for fun. Let’s try a v100. I feel like that’s kind of like a reasonable GPU that’s not too crazy. To run it on the GPU, I’m going to do exactly what I did before, spell run python band.py data.json -m, argument for mounting that data.json file, and then also I need another argument, -t. – t is for –machine, it’s to select the machine, I’m going to pick v100 which is a machine that has a GPU that I’m excited to try. And now I’m going to hit Enter, and we’re going to run it on the GPU. Okay, let’s go. Okay so here’s the thing. I am running this code now on a machine that has a powerful GPU, but I’m not actually making use of any of the code libraries that would actually make use of the GPU, so technically this is really
going to be the same thing. And it already finished. But when we get to the next tutorials that are going to come in the future, looking at LSTMs, and
style transfer, Pix 2 Pix, those will really make use
of a machine with a CPU. Okay it finished, it took
seven seconds, there we go. Alright so that’s going to wrap things up. I hope that you enjoyed this tutorial. I hope you learned a little bit about what it means to use a
cloud computing resource to run code that you’re writing on this computer or somewhere else, you could do it in Python and in other environments as well that are supported by Spell. Thank you so much to Spell for the opportunity to do these tutorials. I really appreciate it. I’ve had a lot of fun playing around with the platform and hope to use it again
in future projects. So go over to the website,
spell.run, give it a try. Ask your questions in the Comment. Look in the video’s description for two links to the
upcoming live streams, or if those have already happened, those links will be
replaced with the archive of those live streams as well. So I can’t wait to see what you make, how it works for you, what kind of things I forgot to talk about that I get to answer in the Comments. And I’ll see you again
someday on The Coding Train. (whistling) Choo Choo! (upbeat music)

46 thoughts on “Introduction to Spell (for Machine Learning in the Cloud)

  1. Hey Dan! Is there a way you can teach us something about using a nodejs via a webpage, like requesting something from nodejs from a html website?

  2. Are you going to make any more TensorFlow.js tutorials? Maybe hand-drawn digit recognition? That would be awesome, because I don't understand tutorial on tensorflows website, I guess it's for more advanced programmers.

  3. I put a spell on you
    Because you're mine

    You better stop the things you do
    I ain't lyin'
    No I ain't lyin'

    You know I can't stand it
    You're runnin' around
    You know better daddy
    I can't stand it cause you put me down
    Oh oh

    I put a spell on you
    Because you're mine
    Oh oh

    You know I can't stand it
    You're runnin' around
    You know better daddy
    I can't stand it cause you put me down
    Oh oh

    I put a spell on you
    Because you're mine

    You know I love you
    I love you
    I love you
    I love you anyhow
    And I don't care if you don't want me
    I'm yours right now

    I put a spell on you
    Because you're mine

    Because you're mine
    Because you're mine
    Oooh yeah

  4. Literally been binge watching the whole coding challenge playlist and now this! A.i!๐Ÿ˜๐Ÿ˜

  5. what text editor was he using to view his python files?it seemed different than his normal atom editor,or is it just another theme? if so does someone know what theme this is?

  6. Please stop staring new video series.
    Instead please complete your old ml5 series..๐Ÿ˜‘๐Ÿ˜‘

  7. Its the first time I have seen your video being sponsored .And it is quite relevant to what you do on youtube

  8. Where should I start with machine learning/deep learning etc ?
    From what I've heard it's nice to use python for it and I know it !

  9. Rather than just sponsorship, I guess codingTrain channel must try to benefit some subscribers by bringing in coupons and all.

  10. I really like your videos Daniel! So nice and useful environments and projects! ๐Ÿ™‚

  11. Does someone knows how can i move an ellipse when my mouse is pressed, and leave it in that position when i stop it? on P5

  12. hello guy, I thank you for all the videos tutorials you've been giving they are really amazing and really easy to understand.Thanks

  13. Thanks for the video. Keep up the good work..
    Q: is this better than using VPS? I mean i could buy a vps and do all the stuff using ssh?

  14. You have a greenscreen. I think you should put a dry erase coating on top of it… that you you can just have a blank notepad window on top of which you can write with a dry erase marker.. that way you dont have to switch around for every little thing you write

  15. I'm new to neural networks and machine learning. Which set of videos does anyone recommend starting at?

  16. Hey Dan, Saw this video on Spell's LinkedIn. Love your energy and charisma! Made it easy to understand Spell's platform.

  17. just throwing this out there… bixby is an ai programmed in JavaScript that offers it's sdk free. seems up your Alley. I'm gonna poke around with it either way ๐Ÿ˜ probably with my version of your p5 afinn 111 idea.

  18. I just found your Website. I do AI and quantum AI development, so I really appreciate that you covered this (had been using a combo of AWS and our own NVidia hardware, which for security reasons, we cannot develop AND serve on). This seems perfect, and will try it. Thanks. ย 
    One other thing, I love your positive, approachable, enthusiastic approach. Really a pleasure to watch. Keep it cranking!

Leave a Reply

Your email address will not be published. Required fields are marked *