Add content and images to site
@ -1,18 +0,0 @@
|
||||
---
|
||||
slug: olomana
|
||||
title: Olomana (PWS)
|
||||
authors: [jrunyan]
|
||||
tags: [olomana, pws]
|
||||
---
|
||||
|
||||
# Olomana
|
||||
|
||||
Check out the link [here](https://github.com/runyanjake/olomana) to learn more about the olomana project, beyond what's in this blog!
|
||||
|
||||
Whitney was the codename for my first homelab setup (For reference: https://www.reddit.com/r/homelab/).
|
||||
It was built out of my friend's handmedown hardware in an old server case that was e-wasted from school.
|
||||
This initial build was on the "janky" side, featuring an unmounted power supply in the optical bay, secured only by some green yarn. (Fire hazard, anyone?)
|
||||
|
||||
[Whitney, PWS v1.0](@site/blog/2024-01-28-olomana/whitney.png)
|
||||
|
||||
...
|
After Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 35 KiB |
@ -0,0 +1,77 @@
|
||||
---
|
||||
slug: llm-pipeline
|
||||
title: LLM Pipeline with Rivet and LLMStudio
|
||||
authors: [jrunyan]
|
||||
tags: [ai, workflow]
|
||||
---
|
||||
|
||||
# Building my LLM Pipeline
|
||||
|
||||
Like so many others, I've recently delved into the wonderful world of Large Language Models (LLMs) and Generative AI, and more importantly, into the most recent of self-hostable resources from various researchers and fellow hobbyists.
|
||||
With both of these machine learning flavors spawning hordes of AI-driven startups as of late, I wanted to give things a shot on my own and see just how much tinkering is really needed to start producing something interesting.
|
||||
|
||||
I bring with me the concept of workflow being one of the most important factors of productivity. If the software devlopment process isn't streamlined, or your record->edit->upload pipeline for content creation has bottlenecks, your productivity takes a big hit.
|
||||
The same is true here, so this is why I've looked through FOSS projects for a good way to build myself an LLM pipeline.
|
||||
|
||||
|
||||
An ideal pipeline for me allows me to
|
||||
- switch the models in use on demand
|
||||
- change the "business logic" of the pipeline on demand
|
||||
- interface from code or hook into other services, in case i decide to productize something
|
||||
|
||||
Luckily others think like me, so we are luckily blessed with LLMStudio. This allows me to explore different models, hot swap them in, quickly test them, and most importantly, start them as an api which conforms to the OpenAI api format.
|
||||
|
||||
When looking for a frontend for my pipeline, I tried a few things but ultimately felt like a lot of software was angled toward working directly with OpenAI resources and other AIaaS solutions that require api keys. Not a lot of them supported the self-hosted option.
|
||||
Eventually I found Rivet, and it has been a good solution so far. It is happy to support anything that looks like OpenAI's api format, so we are good to go.
|
||||
|
||||
What follows is a short tutorial for a POC of my LLM pipeline.
|
||||
|
||||
|
||||
## Tutorial
|
||||
|
||||
1. Install Rivet and LLM Studio (links below)
|
||||
|
||||
2. Launch Rivet and begin a new Graph.
|
||||
Add a simple flow with text nodes leading into a Chat node, and the output being dumped into a Graph Output node.
|
||||
|
||||

|
||||
|
||||
Running this gives an error because there's no OpenAI credentials, but we'll be running locally so that's not a problem.
|
||||
|
||||
3. In LM Studio, go to the Search tab and find a model. In the example I search for Mistral and find `mistral-7b-instruct-v0.1.Q2_K.gguf`. Download it to somewhere you've got space, these are large!
|
||||
The model should show up in the "My Models" tab.
|
||||
|
||||

|
||||
|
||||
4. Open the "Local Server" tab and in the top bar, load your model.
|
||||
|
||||

|
||||
|
||||
Leave the configuration alone EXCEPT for enabling CORS, which allows us to connect from other origins (e.g. through curl).
|
||||
|
||||

|
||||
|
||||
5. Click Start Server and confirm things are working by copying the curl given as an example. You will need to allow LM Studio through your computer's firewall.
|
||||
|
||||
You should see console output confirming things work.
|
||||
|
||||

|
||||
|
||||
6. Back in Rivet, configure the Chat node.
|
||||
In GPT Model, choose "Local Model".
|
||||
In Advanced, put in the endpoint pointing to LM Studio. This would be the endpoint ending in /v1/chat/completions.
|
||||
|
||||
IMPORTANTLY, DO NOT flip the switch to the right unless you plan to explicitly add your endpoint in as a node on the map.
|
||||
|
||||

|
||||
|
||||
7. Click run in the top right to generate an output.
|
||||
|
||||
## Resources
|
||||
|
||||
[Rivet Project Page](https://rivet.ironcladapp.com/)
|
||||
|
||||
[LM Studio Project Page](https://lmstudio.ai/)
|
||||
|
||||
[Reference Video](https://www.youtube.com/watch?v=vyzNkWYIcac)
|
||||
|
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 18 KiB |
71
website/blog/2024-02-15-sdxl-pipeline-with-comfyui/index.mdx
Normal file
@ -0,0 +1,71 @@
|
||||
---
|
||||
slug: sdxl-pipeline
|
||||
title: Stable Diffusion XL Pipeline with ComfyUI
|
||||
authors: [jrunyan]
|
||||
tags: [ai, workflow]
|
||||
---
|
||||
|
||||
# Building my Stable Diffusion XL Pipeline
|
||||
|
||||
Stable Diffusion is a fun way to experience AI. For someone exploring the models that others create, it's important to have a streamlined workflow so that the bulk of time can be spent on experimentation rather than configuration.
|
||||
|
||||
I learned of Stable Diffusion XL in 2023 and wanted to find nice UI-based solution for doing this experimentation. ComfyUI has what I'm looking for. It's a commonly used tool now, and a lot of people contribute workflows, models, and fine tuning checkpoints.
|
||||
|
||||
Here's how I work with it.
|
||||
|
||||
## Setup
|
||||
|
||||
1. Clone the ComfyUI repo (link below).
|
||||
|
||||
2. In the ComfyUI folder, for Windows machines with Nvidia GPUs, run `run_nvidia_gpu.bat`. It starts a default project.
|
||||
|
||||

|
||||
|
||||
3. That's it! All further configuration depends on what you're plugging into it.
|
||||
|
||||
## Using ComfyUI
|
||||
|
||||
You don't need to read it from me, ComfyUI has really thorough [examples](https://comfyanonymous.github.io/ComfyUI_examples/)! But here's what I typically do.
|
||||
|
||||
### Custom Models/Workflows/Fine Tuning
|
||||
|
||||
CivitAI has custom workflows you can download that do certain things. You can import other workflows, or export your current setup to a workflow with the Save feature.
|
||||
Sometimes workflows require custom nodes which have to be downloaded seperately.
|
||||
|
||||
- There are custom model checkpoints that you can add to the `/ComfyUI/models/checkpoints` folder and use in the `Load Checkpoint` node.
|
||||
- There are custom fine-tuning weights called LoRAs that can be placed in the `/ComfyUI/models/loras` folder and used with the `Load LoRA` node.
|
||||
- Also, you can download VAE weights, place in `/ComfyUI/models/vae` as well into some nodes.
|
||||
|
||||
Check out ComfyUI's examples for workflows you can download.
|
||||
|
||||
## Some Fun Examples!
|
||||
|
||||
1. Text to Image
|
||||
|
||||
The base SDXL workflow ([Base SDXL + Refiner](https://comfyanonymous.github.io/ComfyUI_examples/sdxl/)) is a pretty good way to generate images.
|
||||
|
||||
Fun fact, the images on the home page of this website were generated using this workflow, specifying just positive and negative prompts!
|
||||
After image generation they were passed through [Adobe's SVG conversion tool](https://new.express.adobe.com/tools/convert-to-svg).
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
2. Text to Image to Video
|
||||
|
||||
This flow is a combo of 2 examples. I'm using a model trained to generate valentines day cards! It has some problems with text but otherwise generates nice happy characters.
|
||||
The image to video is best suited for photoreal images but does give us a little motion in the final result.
|
||||
|
||||
[CivitAi Link](https://civitai.com/models/298774/valentines-cards-xl-concept)
|
||||
|
||||

|
||||
|
||||
|
||||
## Resources
|
||||
|
||||
[ComfyUI Page](https://github.com/comfyanonymous/ComfyUI)
|
||||
|
||||
[CivitAI Page](https://civitai.com/tag/sdxl)
|
After Width: | Height: | Size: 260 KiB |
@ -5,6 +5,17 @@ tags:
|
||||
- about
|
||||
---
|
||||
|
||||
# Hello world!
|
||||
# About Me
|
||||
|
||||
it jake
|
||||
I'm an athlete, biker, and software engineer native to the Bay Area, working as a software engineer in Mountain View.
|
||||
|
||||
On the weekends, you can catch me recording bike rides for my Youtube channel [Jake's West Coast](https://www.youtube.com/@jakeswestcoast), visiting with friends, or on a trip out in nature.
|
||||
I've had a very sports-heavy life, and currently play multiple volleyball leagues as well as a good bit of pickup basketball when I'm not at the gym.
|
||||
|
||||
When it comes to work/technical interests, I love building and maintaining products/services that people can use broadly, frequently, and to great value. I engage in the practice of [homelabbing](https://www.reddit.com/r/homelab/), and maintain my server Olomana where this website is hosted, in addition to cool open-source software and many side projects in various stages of development.
|
||||
|
||||
In my personal life, cooking is a side hobby, and if you're looking for a curated list of recipes, I maintain [recipes.whitney.rip](https://recipes.whitney.rip/), an ad-free personal online cookbook.
|
||||
|
||||
Thank you for checking out my website!
|
||||
|
||||
I can be contacted at jake@runyan.dev.
|
||||
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
slug: about-me
|
||||
title: About Me
|
||||
authors:
|
||||
name: Jake Runyan
|
||||
tags: [about, me]
|
||||
---
|
||||
|
||||
Hello world this is jake
|
40
website/projects/2024-01-28-olomana/index.mdx
Normal file
@ -0,0 +1,40 @@
|
||||
---
|
||||
slug: olomana
|
||||
title: Olomana (PWS v2)
|
||||
authors: [jrunyan]
|
||||
tags: [olomana, pws]
|
||||
---
|
||||
|
||||
Check out the link [here](https://github.com/runyanjake/olomana) to learn more about the The PWS 2.0 redesign, beyond what's in this blog!
|
||||
|
||||
# Whitney
|
||||
|
||||
Whitney was the codename for my first homelab setup (For reference: https://www.reddit.com/r/homelab/).
|
||||
It was built out of my friend's handmedown hardware in an old server case that was e-wasted from school.
|
||||
This initial build was on the "janky" side, featuring an unmounted power supply in the optical bay, secured only by some green yarn. (Fire hazard, anyone?)
|
||||
|
||||

|
||||
|
||||
I ran a lot of services from this box - my personal website/online resume, side projects, a Covid-19 data tracker, game servers, and a lot of other projects that taught me lessons in DNS config, networking, maintaining persistent storage and others.
|
||||
|
||||
But eventually I started running up against the limits of the box. The machine's CPU was released in 2008, which was indicative of the age of most of its hardware.
|
||||
After spending a lot of work on the original Whitney config in the first repo, I decided that I had learned enough to warrant an upgrade.
|
||||
|
||||
# The Upgrade
|
||||
|
||||
PWS 2.0 was given the nickname of "Olomana", a second step in this pattern of mountainous server names.
|
||||
Mount Olomana (https://en.wikipedia.org/wiki/Olomana\_(mountain)) is a mountain on the Windward side of Oahu, Hawaii.
|
||||
It has 3 peaks which are are a popular, albeit difficult and dangerous hike. While visiting family in Kailua, I hiked the Ko'olau range and snapped this picture of the rarely seen backside of Mount Olomana.
|
||||
|
||||

|
||||
|
||||
Olomana, the web server is a significant upgrade over its predecessor. I built it as a 4U rack-mounted machine with new components inside a RackSolutions 16U rack.
|
||||
The build itself includes a number of current gen budget components. Cricital resources like Ram and CPU cores are more abundant in the new build.
|
||||
A UPS was added to the system for resilience in power outages. In a few instances, the UPS has protected my drives during power outages during the last few years of Northern California winters.
|
||||
A dedicated write drive that was tested on PWS 1.0 also helped to combat some data corruption issues I had faced on the old hardware.
|
||||
|
||||

|
||||
|
||||
# Links
|
||||
|
||||
Check out the [repo](https://github.com/runyanjake/olomana) if you'd like to learn more about it.
|
BIN
website/projects/2024-01-28-olomana/olomana.png
Normal file
After Width: | Height: | Size: 3.4 MiB |
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 1.9 MiB |
BIN
website/projects/2024-02-15-jakes-west-coast/davinci.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
website/projects/2024-02-15-jakes-west-coast/gimp.png
Normal file
After Width: | Height: | Size: 2.6 MiB |
37
website/projects/2024-02-15-jakes-west-coast/index.mdx
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
slug: jakeswestcoast
|
||||
title: Jake's West Coast
|
||||
authors: [jrunyan]
|
||||
tags: [jakeswestcoast, biking]
|
||||
---
|
||||
|
||||
Jake's West Coast is my [YouTube channel](https://www.youtube.com/@jakeswestcoast) that chronicles the mountain, gravel, and road biking rides that I do with my friends.
|
||||
We typically ride the Santa Cruz mountains, San Francisco, or the North Bay.
|
||||
|
||||
Focusing on capturing footage while doing a long effort exercise is difficult but it gives me something to think about while I'm riding. I have a few camera angles that help me tell the stories of our rides.
|
||||
|
||||
# Cameras
|
||||
|
||||
Primarily, I've mounted a GoPro under the saddle using a mount that clamps onto the rails. I'm not crazy about this location, because it blocks me from using a saddle bag, but it gives a really good angle.
|
||||
|
||||

|
||||
|
||||
As a secondary angle, I have a second, older gopro that I use for forward-facing footage. Depending on what kind of riding we do, this is either mounted using GoPro's bite mount, or a chest strap for a POV angle.
|
||||
|
||||

|
||||
|
||||
# Editing Process
|
||||
|
||||
Editing all the footage takes a good bit of effort as well, but I still try to get a one-day turnaround on videos to share with those that went on the ride.
|
||||
|
||||
For the editing process, I use Davinci Resolve, a good node-based editor that allows me to do color grading in addition to cutting the video together. All footage is shot in log format.
|
||||
|
||||

|
||||
|
||||
When creating thumbnails, I use the FOSS software Gimp as a photo editor.
|
||||
|
||||

|
||||
|
||||
# Links
|
||||
|
||||
Check out the channel [HERE](https://www.youtube.com/@jakeswestcoast) or the Instagram account [HERE](https://www.instagram.com/jakeswestcoast/) for more Jake's West Coast!
|
BIN
website/projects/2024-02-15-jakes-west-coast/whitney.png
Normal file
After Width: | Height: | Size: 1.9 MiB |
5
website/projects/authors.yml
Normal file
@ -0,0 +1,5 @@
|
||||
jrunyan:
|
||||
name: Jake Runyan
|
||||
title: Site Owner
|
||||
url: https://jake.runyan.dev
|
||||
image_url: https://github.com/runyanjake/static/blob/main/jakeswestcoast_warm_logo_square.png
|
@ -5,7 +5,7 @@ import styles from './styles.module.css';
|
||||
const FeatureList = [
|
||||
{
|
||||
title: 'Software Engineer',
|
||||
Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default,
|
||||
Svg: require('@site/static/img/software_engineer.svg').default,
|
||||
description: (
|
||||
<>
|
||||
I finished a Computer Science degree in 3 years at UC Santa Cruz and have
|
||||
@ -17,7 +17,7 @@ const FeatureList = [
|
||||
},
|
||||
{
|
||||
title: 'Homelabber',
|
||||
Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default,
|
||||
Svg: require('@site/static/img/homelabber.svg').default,
|
||||
description: (
|
||||
<>
|
||||
This website runs on Olomana, my v2 homelab setup. Check out r/homelab to
|
||||
@ -29,7 +29,7 @@ const FeatureList = [
|
||||
},
|
||||
{
|
||||
title: 'Lifelong Learner',
|
||||
Svg: require('@site/static/img/undraw_docusaurus_react.svg').default,
|
||||
Svg: require('@site/static/img/learner.svg').default,
|
||||
description: (
|
||||
<>
|
||||
As side hobbies, I love cooking new things, improving at volleyball and cycling,
|
||||
|
@ -20,7 +20,7 @@ function HomepageHeader() {
|
||||
<Link
|
||||
className="button button--secondary button--lg"
|
||||
to="/docs/about">
|
||||
Get to Know me Here! - 5min ⏱️
|
||||
About Me
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
68967
website/static/img/homelabber.svg
Normal file
After Width: | Height: | Size: 3.5 MiB |
55014
website/static/img/learner.svg
Normal file
After Width: | Height: | Size: 2.8 MiB |
46823
website/static/img/software_engineer.svg
Normal file
After Width: | Height: | Size: 2.4 MiB |