exfrmdlrstu

exfrmdlrstu

How to use {:local, dir} when loading models in Bumblebee?

I’m getting errors when trying to use {:local, cache_dir} in Bumblebee’s load_model function. Checking the cache directory using cache_dir(), I was able to locate the models that I previously downloaded, but the files inside are hashed. Is there any way I could use the downloaded models so I can call each model on demand and not use too much memory/storage?

Here is an example code that I use to load from the cache if the model is already downloaded:

defp maybe_load_from_cache(whisper_model) do
    {_, model} = whisper_model
    model_path = String.replace(model, "/", "--")
    cache_dir = Path.join(Bumblebee.cache_dir(), "huggingface/#{model_path}")

    case File.ls(cache_dir) do
      {:ok, _files} ->
        {:local, cache_dir}
      _ ->
        whisper_model
    end
  end

Marked As Solved

jonatanklosko

jonatanklosko

Creator of Livebook

Hey @exfrmdlrstu! There are two distinct bits:

  1. The :local source allows you to point to a local directory that follows the usual structure of a HuggingFace Hub repository. For example, you could git clone a repository such as google-bert/bert-base-uncased and then use {:local, path_to_dir} to load from there.

  2. The internal cache, where bumblebee downloads the individual files from a remote repository. This cache is opaque and Bumblebee uses it to only download the given model/tokenizer file once. When you call Bumblebee.load_model/1 second time, it only makes a quick request to the HuggingFace repo to make sure the remote file hasn’t changed, and if it hasn’t, then simply reuses the one downloaded previously. You can actually disable all networking by setting BUMBLEBEE_OFFLINE=1 env var, or by loading from {:hf, "org/repo", offline: true} (if the model is not in the cache yet, the function raises).

Looking at your snippet specifically, I think what you are trying to do is what Bumblebee.load_model/1 already does by default, as described above. Let me know if I missed something : )

Also Liked

exfrmdlrstu

exfrmdlrstu

I see, so that’s what Bumblebee’s cache is for. This makes a lot of sense. Looks like I don’t need to worry using load_model on demand. Thank you for this, @jonatanklosko !

Where Next?

Popular in Questions Top

itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: https://hexdocs.pm/ecto/Ecto.Schema.html#module-...
New
vac
Hi, I'm quite new in Elixir and I'm trying to format a string to a PEM format. I have the certificate value like MIIDBTCCAe2...... and ...
New
mathew4509
I have a list say x = ["23gh", "56kh", "97mh"] I would like to pass each element to Val in each iteration. Say, in iteration 1 -------...
New
fayddelight
I tried installing elixir 1.11.2 erlang 23.3.4 via asdf in my zsh shell. Enabled the versions locally and globally. When I list them ...
New
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
New
johnnyicon
Hi all, I've just started learning Elixir and Phoenix Framework, so please pardon my n00bness at this stage. I'm trying to use Postg...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
wernerlaude
In AR this is so simple @articles = current_user.articles How to do in Ecto? def index(conn, _params) do current_user = conn.assig...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

Other popular topics Top

Qqwy
Update: How to use the Blogs & Podcasts section You can post links to your blog posts or podcasts either in one of the Official Blog...
3268 119930 1237
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
977 41022 311
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
myronmarston
The Elixir Typespec docs show the following syntax for keyword lists in typespecs: # ... | [key: type] # keyword lis...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
273 38985 115
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New

We're in Beta

About us Mission Statement