DSPy a system for AI to Write Prompts and Do Fine Tuning
Distributed Computing with RabbitMQ
1. “Divide and conquer
riding rabbits and
trading gems”
- a tale about distributed programming -
• http://www.slideshare.net/hungryblank
• http://github.com/hungryblank/rabbit_starter
Paolo Negri @hungryblank
12. Great! but...
• Fetching, parsing and analyzing
2.000.000 pages of results will take a
long time
• we want to collect the statistics in a
limited time and this sequential
approach is not quick enough
13. Distributed Computing
Is a method of solving computational
problem by dividing the problem into
many tasks run simultaneously on
many hardware or software systems
(Wikipedia)
14. Map Reduce "Map" step
the master node takes the
input, chops it up into smaller
sub-problems, and distributes
those to worker nodes.
(Wikipedia)
15. Problems:
• How many nodes?
• How many workers?
• Distribution mechanism to
feed the workers?
16. What about queuing?
• the master node takes the input, chops
it up into smaller sub-problems, and
publishes them in a queue
• workers independently consume the
content of the queue
17. Here comes
• RabbitMQ is an implementation of AMQP,
the emerging standard for high
performance enterprise messaging
• It’s opensource
• Written in Erlang
18. Erlang?
• general-purpose concurrent programming
language designed by Ericsson
• first version written by J. Armstrong in 1986
• distributed
• fault tolerant
• soft real time
• high availability
19. Erlang - is coming back
• Projects
• CouchDB - RESTful document storage
• WebMachine - REST toolkit
• Nitrogen - web framework
• Mochiweb - web framework
• Ruby shops using it
• 37 Signal - Campfire
• Heroku
21. Install it
• sudo apt-get install rabbitmq
• sudo gem install tmm1-amqp
Note: rabbitMQ must be v1.6.0 and amqp gem v 0.6.4
to follow the code in the slides
24. Get for free
• Decoupling master/worker
• Workers take care of feeding themselves
• Flexible number of workers
25. Behind the scenes
Worker1
Master
msg A Exchange Queue Worker2
Worker3
26. Behind the scenes
Worker1
Master
Exchange Queue Worker2
msg A
Worker3
27. Behind the scenes
Worker1
Master
Exchange Queue msg A Worker2
Worker3
28. Behind the scenes
msg A Worker1
Master
Exchange Queue Worker2
Worker3
29. RabbitMQ
• Multiple exchanges (and multiple types of
exchange)
• Multiple queues
• Queues are connected by bindings to
exchanges
• Exchanges route messages to queues
30. RabbitMQ
• Exchanges and queues have names
• BUT direct exchanges created implicitly are
not public and don’t have name
• Queues and messages are resident in RAM
and can be persisted on disk (at a
performance price)
31. What and where
Master
(ruby)
RabbitMQ
(Erlang) Worker
TCP/IP
(ruby)
Worker
(ruby)
Exchange Queue Worker
(ruby)
32. Problem #1
If a worker has a problem we might lose one
or more messages
http://www.flickr.com/photos/danzen/2288625136/
34. Acknoledgement
• messages - 1 or more depending by
prefetch settings - are passed to the client
• the client processes and acknowledges the
messages one by one
• if the client connection closes =>
unacknowledged messages go back in the
queue
42. EventMachine
Is an implementation of Reactor Pattern
• Non blocking IO and lightweight
concurrency
• eliminate the complexities of high-
performance threaded network
programming
43. without EM with EM
Ruby process Ruby process
Time
code code
network network
operation Free
operation
use network use network
operation operation
Callback
result result
Free
Free
44. EventMachine
amqp gem is built on top of
EventMachine => you’re in a
context where you can
leverage concurrent
programming
45. EM - Deferrables
“The Deferrable pattern allows you to specify
any number of Ruby code blocks that will be
executed at some future time when the status
of the Deferrable object changes “
57. Clustering
RabbitMQ - node A RabbitMQ - node B
TCP/IP TCP/IP
RabbitMQ - node C
TCP/IP
58. async vs sync
Syncronous clients on github
• famoseagle/carrot
• celldee/bunny
59. Rabbits on github
• danielsdeleo/moqueue Tests/stubbing
• Check out ezmobius/nanite
“self assembling fabric of ruby daemons”
• Keep an eye on tonyg/rabbithub
implementation of pubsubhubbub (PubSub
over REST)
• auser/alice web app to monitor RabbitMQ
60. More rabbits on github
• tmm1/em-spec
• eventmachine/eventmachine
• tmm1/amqp
• macournoyer/thin