Before I get started, I want to note what creating a substitute really does. The process creates a new Level of Detail of the assembly in which a new part file (the substitute) will exist. This level of detail representation will need to be activated in the main assembly in order to be utilized and to save memory. Read on for more info.
There are tutorials out there and certainly through inventor's help tab. You get started by opening the assembly you want to create a substitute of and though there are a few ways to start the process, I usually right click in the open space of the browser (with no parts or anything selected) and...

I typically select shrinkwarp. It's kind of just what I was taught to use. I've derived many other things but for this specific purpose, I'll typically use shrinkwrap. Then specify the file name and location (this is going to create a new part file). The default is the same location as the assembly. Most of the time I find this acceptable but I've started making a folder for substitutes within the assembly's folder to help keep things tidy.
Once you've done that, you'll be presented with an array of options that effect the memory consumption and versatility of the substitute part. I'd suggest clicking the help icon and going through what these options do. The setup I typically go with is one that my company has decided is the balance they want between versatility and memory reduction. Your preferences may differ.
Last but not least is to note that you don't actually place the *substitute.ipt in your main assembly. The part file generated when creating a substitute is actually quite large. What you do instead is right click the sub assembly for which you created the substitute, scroll down the Representation and click it. A window will pop up asking you about the design view reps used in your overhead assembly. Click the drop down under Level of Detail Representation and select the one that your substitute is active in.
To updated a substitute, you'll need to open the assembly that the substitute is a sub for and make sure you're in the Master LoD. Make whatever changes need be made then switch to the substitute LoD. The sub will not update on it's own. Right click the part file in the browser and select "Check for Updates". Inventor will show you a dialog saying that updates are available and would you like to update. To which you say yes.
The very last thing I want to note is this! When using substitute LoDs of sub assemblies in a main assembly, a new LoD will be created when the first substitute LoD is made active. This new LoD should be used for switching all Substitute LoDs on. When suppressing components (which is what LoD's do), you cannot have a lower level component (sub assembly part for example) suppressed and a custom lower level LoD active without having a custom LoD active at the higher level too. This is difficult for me to explain through text but that's kind of how it works. Inventor recognizes that a component at a lower level is suppressed and in order for that to be the case, a custom LoD must be active. So if one is not present, it will create one.
This is alot of text, trust me, I know. But using substitutes effectively really can save you a great deal of time and frustration. I'm sorry if my explanation leaves room for confusion, feel free to respond if you have questions. I hadn't intended on typing all this up but rather to refer you to a youtube video or something lol.
Anyway. Hope this helps.