Hello, and thank you for showing interest in our research. My name is Dylan Martz, and I'll be presenting common work with my colleagues Jose Maria Bermudo-Mera, Angshuman Karmakar, and Azam Soleimaniyan on efficient lattice-based inner product functional encryption. Let's start with some basics. Functional encryption introduced by Sahay and Waters in 2005 can be seen as a generalization of public key encryption, where we have a trusted third party being able to produce public keys that enable an encryptor, say Alice in our case, to encrypt message X using the public key. And independent of that, the trusted third party is able to produce functional keys, depending on a function F, that can be distributed to a decryptor, say Bob, who can, with the functional key, decrypt from the encryption of message X a function F of X. So, in some sense, the decryptor is able to do computation on encrypted message and decrypt only the result of this function. Notice a similarity with homomorphic encryption, which also enables computing on encrypted data, but usually there the result is returned back to encryptor. In this case, in the case of functional encryption, the decryptor should be able to decrypt only the result. Let's try to understand what it means for a functional encryption scheme to be secure. The security notion is usually modeled as an indistinguishability game, where an adversary submits to messages, say X0 and X1, and the challenger encrypts one of them. The adversary shouldn't be able to tell which message was encrypted. But the challenge here is, in functional encryption, that the adversary shouldn't be able to distinguish the message, even if he or she has access to functional encryption keys, with this limitation that he or she can ask only for functional encryption keys for functions that do not distinguish messages itself. So only for functions f such that f of X0 is equal to f of X1. There is a slight difference between selective and adaptive security, where the adaptive security is a bit stricter, demanding that the adversary cannot submit messages X0, X1, even after he or she observed the public parameters and public keys. There has been quite a lot of research done already in the field of functional encryption, and there are many interesting results and constructions. There are designs for functional encryption schemes for arbitrary functions, but unfortunately, as it was shown, constructing such schemes is equivalent to indistinguishability obfuscation, constructing which is known to be quite hard, and even though there were quite major breakthroughs recently, they still remain a bit impractical. For this reason, a subfield emerged, starting with Abdullah et al. in 2015, focusing on providing functional encryption schemes that have some limited functionality, but designing these schemes had efficiency in mind, so they tried to provide schemes that could be practical and implemented. In particular, schemes for inner products, so linear functions were designed and also quadratic functions based on well-established assumptions such as DDH, DCR and LWE. Furthermore, they were extended to multi-client settings in a decentralized or centralized way, meaning that multiple encryptors can provide ciphertext and also with function-hiding property. In this context, our work improves this line of work, where we wanted to provide efficient and practical ring LWE-based, so quantumly secure functional encryption scheme for inner product, and we do so with selective and also adaptive security. In particular, we improve results on inner product functional encryption schemes based on LWE, and we do this transition to ring LWE setting, because we really wanted to provide schemes that can be considered practical, since the practicality of existing LWE schemes, as I will try to argue later, are still quite limited. To provide these results, we need to prove some new results on lattices, as I will tell you later. Additionally, to make the schemes even more practical, we provide also a compiler to decentralized identity-based multi-client inner product functional encryption and a quite highly optimized implementation showing our claims on efficiency. An inner product functional encryption scheme should support encrypting vectors, say X in our case, and deriving functional encryption keys based on some other vectors, say Y, that enable you to decrypt an inner product of X and Y, of course having such a functional encryption key. The idea how ring LWE-based inner product functional encryption scheme is constructed is similar to other existing inner product functional encryption schemes, and also can be seen as a natural generalization of ring LWE-based public key encryption. The main idea is to produce public keys that can be seen as ring LWE samples. Recall that we obtained such samples by sampling some values, say A, uniformly at random, from some ring, usually ring of polynomial, which is the case in our scheme as well, and some secret and noise values, usually sampled from some small distribution such as Gaussian distribution. To encrypt in our functional encryption scheme, one does the same as it's done in ring LWE-based public key encryption, but just we encrypt coordinates of the vector that we want, so values X, I, each one with a separate public key that we produced above. The point is here also that shared randomness needs to be used, so the values, the random values that are used across all these ciphertext values are shared. To generate a functional encryption key, one uses the fact that ring LWE-public key encryption scheme is key homomorphic, so a functional key is produced as a linear combination of secret keys with respect to coefficients of vector Y. Finally, to decrypt an inner product, one uses the ciphertext homomorphic property of ring LWE and evaluates as it was in a standard way, which results in some value plus some noise, and because we obtain this noise as it is standard, the values that were encrypted were also a bit scaled, so this scaling of the result helps us to eliminate the noise. Let's see what are the main challenges in proving security of such schemes. As previously mentioned, the main challenge in functional encryption schemes is to prove that encryption is still indistinguishable, even knowing functional keys. And as it turns out, in our case, functional keys reveal a bit more information about the underlying ring LWE problems than desired. Maybe going directly to our scheme, let's first just assume that the adversary had no access to functional keys. Then one could simply argue that values in public keys, sampled in this way, could be seen as ring LWE samples, and one could then argue that they can be replaced by the hardness of ring LWE problem with uniformly random ones, since the adversary could not distinguish this change. And then in the next step, also these values here could also be replaced by uniformly random sampled ones, and having such values, then they statistically hide the message. But since the adversary has some information about secret values, some known directly through the functional keys, but some also are leaked through the noise in the decryption, one cannot simply replace this and these values with uniformly random ones. But nevertheless, a similar strategy can be employed and with a bit of resampling and also a bit of rewriting the ciphertext. One can still replace these values and actually also these values with some other values that statistically hide all the information that could be used for distinguishing which message was encrypted. But to do so, one arrives to the following problem that we call multi-hint extended ring LWE problem. Recall that standard ring LWE problem asks to distinguish for say A and U uniformly sampled values from some ring of polynomials and some S and E also sampled from a ring of polynomials but from some small distribution, usually Gaussian distribution. So the ring LWE problem asks to distinguish this pair from uniformly a random sampled pair. In the multi-hint extended ring LWE problem, we have a similar situation. We want to distinguish these values from these values, but additionally we are given some hints that reveal some information about the secret and the noise term in the ring LWE sample. And what we were able to do, we were able to prove that if one increases the starting distribution of the noise and secret, one can still argue that with this a bit increased distribution that these hints do not reveal enough information to distinguish the values. In particular, one can transfer the hardness of this problem to the hardness of the original ring LWE problem. And this allows us to rewrite, to change the ciphertext sampling by the challenger in an indistinguishable way for the adversary. Actually, we can use this trick twice in our proof, which simplifies and gives a bit better parameters in comparison to the LWE proof, which also used multi-hint extended LWE problem in their case. But in their case this is not enough and additional tricks need to be employed, so our proof is a bit simpler. Nevertheless, using only hardness of multi-hint extended ring LWE problem, we were not able to prove adaptive security of our scheme. So what we needed to do is modify the scheme slightly, particularly sampling public keys, since these are the ones that adversary can observe before submitting messages in the adaptive security game. And we modified them with a trick that was also used in LWE-based functional encryption schemes. In particular, replace it with values sampled like this, where we sample values A, J, shared across public keys, uniformly at random, and secret values S, I, J, from some small Gaussian distribution. What one can argue is that values sampled like this are indistinguishable from random by a statistical argument, so not depending on the hardness of underlying ring LWE problem or something like that. These arguments are usually known as leftover hash lemma and are reasonably standard thing in LWE setting. In ring LWE settings there are also results showing that these kind of values are indistinguishable from random. Some quite general results, some also a bit more specific. What we did is we took these results and a bit polished them to fit our purpose, to have as efficient scheme as possible, so to get a bit better parameters then they are suggested in say the most general results. What is also interesting in the ring setting is that this M value here that also tells us how big the public keys, public parameters will be does not need to be too big in the LWE setting. So in the matrix setting it must be quite big but here it can be say constant for a bit depends but how you want to choose parameters but it does not grow as a linearly with N or something like that. And having public keys statistically indistinguishable from random one can then use some standard arguments with complexity leveraging to argue that a similar proof as it was in selective case so also using multi-hint extended to ring LWE problem but a bit in a slightly different way one can lift this proof to adaptive security without losing much on security assumptions. So what are the benefits of ring LWE setting? Well ring LWE allows us as set to simplify the proofs arriving to a bit better parameters in the end and we did really carefully craft these parameters to not lose efficiency for too much. On the other hand ring settings allows some faster operations due to the fact that multiplying polynomials is a bit faster than multiplying well can be a bit faster than multiplying matrices with vectors and this is for example reflected in this table where we compare with two known LWE based inner product functional schemes where procedures like setup and encryption has this factor of N times log N which is asymptotically what's the cost of multiplying two polynomials while for multiplying matrix with the vector we have terms N squared in setup and encryption as well so there is an improvement here but also in the ring setting we do have smaller keys since in LWE settings we need to have quite big matrices to ensure security. In particular for example for public key we have these factors of N squared log Q squared in both LWE schemes while in ring LWE we have only N times log Q factor so a huge improvement well which might not seem on paper as much it turns out that if one implements such a scheme for say vectors of reasonably big length it turns out that then the public keys in the case of LWE can be even measured in gigabytes while in ring LWE they are only megabytes of size so a drastic improvement. There is another advantage which could be important for many applications and that is that ring setting allows to encrypt values in one ciphertext in parallel. This is well known phenomenon that is also used in homomorphic encryption so in our case it means that we are able to encrypt not just one vector but maybe thousands of vectors in one ciphertext without losing much in the performance actually a really small addition here and this way then on decrypting not decrypting just one value but doing a kind of SIMD type of calculation so in parallel decrypting thousands of values of evaluation of some function in our case inner product. As pointed out we provided an efficient implementation of our scheme and I will let my colleague Ankhshuman explain to you what were the problems and solutions in implementing our scheme We need to perform very large polynomial multiplications for our scheme we choose our primes such that they support efficient polynomial multiplication using number theoretic transform and fast modular reduction we also need large fields for correctness of our scheme we split our large primes using Chinese remainder theorem into smaller primes and perform individual multiplication using smaller primes we provide a full residual number system based implementation using CRT finally as the length of our polynomials can be very large the rearrangement steps after entity or inverse entity can be very costly to avoid this we combine Kulituki entity and Gentleman Sunday inverse entity for security we also need samples from very large Gaussian distributions we achieve this using two steps first we generate samples from a Gaussian distribution with small and fixed standard deviation second we combine the samples from the small distribution to generate samples from arbitrarily large Gaussian distribution we perform both of these steps in constant time to remove any adverse effect of any timing attacks here are our parameters for our implementations we provide parameters for three different levels of post quantum security we also provide the set of CRT primes for each level of security the implementation is available at the above mentioned GitHub repository thank you Anshuman to better understand what these performance numbers mean we also implemented some simple use case to demonstrate how our scheme can be used we showed how to use some simple machine learning on encrypted data in particular we wanted to do simple machine learning on encrypted images images can be seen as simply a vector of pixels so for each pixel you get one value and using our scheme then you can of course encrypt these vectors what we worked with is quite standard data set in machine learning known as MNIST data set of handwritten digits so each image consists of one digit that has been handwritten the task is to classify or predict which image, which digit is in the image so using our scheme one can encrypt these images these can be seen as 785 dimensional vectors and evaluate a simple machine learning model we used logistic regression because it only needs to evaluate linear functions and we are bound in our scheme to linear functions concretely one needs to evaluate 10 inner product functions to get 10 predictions for each digit and what we observe is that it takes roughly 381 milliseconds to encrypt such an image and then to evaluate the machine learning model that was learned before it takes only 170 milliseconds to evaluate 10 inner product functions but notice also that one can encrypt multiple images in one ciphertext without increasing the size of the ciphertext and worsening the time complexity of it so in fact you can encrypt up to 4092 images in parallel in one ciphertext and then evaluate the model on all the images encrypted simultaneously without worsening these performance numbers as a bonus and to make our scheme even more practical we explained how the scheme can be compiled to multi-client setting so a setting where we have not just one encryptor but many of them each encrypting their own secret values, secret message so there are known compilers how to do that for example Abdallah et al explained it in 2019 what we do here is we argue that our scheme can be used in such compilers and we even additionally extend this or generalize it to identity-based decentralized setting so we end up with a scheme where the encryptors can in truly decentralized way without some trusted setup encrypt their values with some labels and the decryptor is then able to decrypt inner product of these values and is not able to join ciphertext that were not meant to be joined only those which correspond to the same label for the conclusion let's recap the results we presented in this talk we provided an efficient ring LWE based inner product functional encryption schemes with selective and also adaptive security we provide some new results on lattices needed to prove security of the mentioned schemes most importantly multi-hint extended ring LWE problem reduction of the difficulty of this problem to a standard ring LWE problem and also a version of leftover hash lemma for rings that we needed to make our scheme more practical we explained how to compile it to identity-based decentralized multi-client scheme and provide an implementation quite optimized implementation of our scheme with multiple parameters and security settings and a simple showcase of how our scheme can be used of course all further details can be found in the paper thank you for your attention and see you


Hi guys, welcome back to this channel. It's Meks from the Meks creation. Remember, if it's your first time to come across this channel, support this channel by subscribing. By the way, do not forget to hit on the notification bell because you will always be updated with a new video. In today's video we are going to look at a question that has been asked so many times and that is regarding the contracts. Yes, we look at contracts in the Gulf countries. We look at contracts in Qatar. We look at contracts in UAE. We look at contracts in Oman. We look at current contracts in Jordan, Saudi Arabia. Let's say in the Gulf states itself, they are all contracts because when you are given a piece, when you are being sponsored, work sponsorship, they must exist what you call a mutual agreement between you, the employee and the employer. And that mutual agreement that is going to exist has to be governed by what you call a written document. And that written document between you, the employee and the employer is what you call a contract. Normally what you call a contract, it can be specified period of time. Sometime it can be an open ended contract depending on how definitely you have to negotiate and what are the terms that are being given to you as they are recruiting you or when they are giving you that job. In today's video, we are going to look at the differences between the two and that is what you call the limited contract and the unlimited contract. Remember, when we talk about these two terms, what you call the limited contract and the unlimited contract. Yes, contractually speaking, these are two different terms. Although they both do the same work or although both of them are being signed by what you call an employee and what you call the employer. And also we shall look at a situation, we shall look at another similarity that both of them have what you call a start and end period. In whatever depending on what kind of situation. A limited contract, what you call a limited contract. A limited contract is that contract that is given or it is what you call a fixed term contract. It has what you call a start date and it has what you call an end date. What does it mean? Most of these contracts for some of you that have been receiving these contracts, you would see a contract that says it is every or it is for two years. Meaning that the day you sign that contract is going to be the commencement date. It is going to be the start date of that contract. Then the day your two years expire from the start of the date that you sign is going to be what you call your end date. For that period that may go beyond that, that has to be what you call a mutual agreement between you and the employer. To see that you can extend the validity of that contract depending on the nature of the position and depending on what kind of need, what kind of need that employer needs for, what kind of qualities or the duration of the time you want to stay on that period. Normally when you see different Gulf countries have different types of contract duration, we look at Dubai before had contract duration over three years, but we look at the new visa system. It has been extended, it is going to be extended converted back to two years. In Qatar we have what you call two years. Remember in Qatar it is only the limited contract is normally for two years. And what does it mean? Meaning that your residence visa or your residence permit, what you call the Qatar ID will always be renewed every after one year. So that you can cover up what you call the limited contract of two years. And that is what it is. It has a start date and it has what you call an end date under what you call a limited contract. And anything beyond that, once the contract is being reached, it is between the agreement between you and the employer and the employer to see that you can extend that contract if at all you feel you still want to continue that company. Then in number two we look at what you call the unlimited contract. Remember? For this kind of contract what you call unlimited contract, that means you are working for your employer with the end overnight date. You work with the employer for a period that is not specified. But remember here in Qatar for such kind of unlimited contract, normally runs for what you call five years. So meaning that between the five years, between that indefinite period that you are running that contract, the decision for you to terminate the contract, it's just going to be the decision, it's going to be ununderstand between you the employee and the employer himself to see that you can terminate that contract. And what governs that, the only difference that governs the indefinite contract is that before you get to terminate or before your employer has to terminate you or before you the employee want to resign or to terminate that contract, you need to give what you call a notice period. And that notice period has to be from one month to two months depending on what you call the labor laws in that country. And when you look at in Qatar, for example for such kind of contracts in Qatar, it is that when you want to resign and you are completed with the company for one year, you have to give a 30 days notice period. And if you want to resign with a particular company and your period has existed has gone beyond what you call one year, then you have to give a notice period which is a two month notice period that you are supposed to serve with that company. So meaning that at that time you can either terminate or employer can terminate the contract or you can terminate the contract depending on what kind of contractual agreement that comes between the two of you. Remember? Something that you need to understand that for your termination or for your resign it can be brought about by different reasons or it can be things that are breaches that may be agreed upon that are not followed and you may wish to terminate the contract. Something still you have to understand it's that can I resign? Can I resign under the unlimited contract? Yes, you have the right to resign. Remember this is the mutual agreement. It's much as it's an indefinite time that you're supposed to serve your employer. It is you can decide to terminate that contract if you worked for that for your employer for one year because you have the right and he has the right to terminate or you have the right to terminate. But however, something that I told you that you should get noted or something that you should note is that you have to give what a notice period. So if you are going to resign before that contract comes to an end and it is between that period that means you need to give that employer what you call a notice period. Hope I've tight-shared something for you very well. Thank you so much for coming back to this channel. It's next from the next creation. If it's your first time to come across this channel, remember consider subscribing to this channel. It's the only way that you will get updated or you will get the most uploaded videos on this channel. Thank you so much again. This makes creation.


The white girl said, yep, sure does. I think I don't stock a cap with a white woman. Leave that nigga alone.  Today. Five years. What's the best part about it? Free wrenches! That's what I thought it was, DC.


hey everyone who very loud is there a volume on here my mic is not on this is not bad I'm very very very loud is there any way I can turn this down you know what they say no know yourself just hold it out here how about this good everyone have a great lunch barbecue fried chicken I don't know the lines are brutal anyhow people on the live cast probably don't want to hear about that hi I'm David Ron check I'm product manager at Google I until recently was a product manager on the Kubernetes project and now we're working on something brand new which we're really excited about this is Vish Vish would you like to introduce yourself how about now I guess everyone I'm Vish I work at Google I work on Kubernetes I've been working with goodness for the last three to four years more recently I've been focusing on like enabling high performance applications specifically machine learning with Kubernetes in a portable fashion and also like looking at more of the application stack and making empowering Kubernetes users essentially yep so like I said we are here to talk about something brand new specifically Kubernetes and machine learning which we think is one of the best opportunities to really extend and use the functionality that Kubernetes provides under the hood and so whenever you approach something new you always want to start with a question what is machine learning we're not going to do one of these like look up in the dictionary things the definition of machine learning nope so the idea is first you start with a question and in this case I don't know how many people have bought a house recently or sold a house or something like that but you may say well how do you determine what your house is worth you come up with some metrics in this case square footage and overall house price and you start drawing some points on a graph and you start and say okay well here's a point on the graph maybe I'll add some more maybe I'll add a lot more and then all of a sudden it looks like a pattern and you're like this is magic then you answer your question how much should you sell your house for well my house is this big therefore I go up to the chart I go over and I get a number presto machine learning right except congrats your machine learning expert and on the way out the door you can't get a certificate with certifying that but things can get complicated right you could have nonlinear groupings based on neighborhoods and environment and crime rate and so on and so forth things can be multi-dimensional here obviously I had something incredibly boring just two features in a linear regression or things could change over time and so as a at a high level what we think machine learning is is when it's a way to solve problems without explicitly knowing how to create the solution okay do we believe at Google this is like our biggest passion in the world I don't know if you know we have some large data centers and they're pretty expensive to run the number one price ends up being power most of the time and we have some pretty smart data center engineers and we said hey data center engineers do you think you could wire up ml to you know the way that we run our data centers and improve things so they did and for those that don't know the the benchmark for m excuse me for data centers is PUE which stands for power usage effectiveness you ideally want it to be one one watt goes in one goodness comes out nobody ever runs at one so at Google it looks like this this is how our ML or excuse me our data center efficient power usage efficiency was working we literally hooked up the data center to this ML thing that ran the water and fans and so on and so forth and it looks like this and then we turned it off and it looked like that it literally was like flipping a switch and that's the power machine learning and because of that we think machine learning should be for everyone that would be a great thing except ml needs DevOps and by that what we mean is DevOps needs composability portability and scalability and I'll get to these in just a second there anyway we could turn this down just a little bit even holding it away from my face it's feedback that's fine so by DevOps like I said by composability I mean the following a lot of people look at ML and they say well great you know I'm gonna go I'm gonna download PyTorch or TensorFlow or a CNTK or something like that and I'm gonna go build a model who thinks they are done when you finished building your model no hands go up good you're all very smart the reality is that real ML looks a lot more like this you got a whole bunch of steps and each of those steps are individual decisions and services and so on that you need in order to get an answer that's what we mean by composability being able to pick and choose those various items the second is a quote by Joe beta of literally a few weeks ago every time you move from one environment to another you need portability unit system that understands how to move with making as few changes as possible because every time you have a change as he says here that's a likelihood of an outage so we go back to this path over here and you look at all those services and each one of these may be on a different system and every one of those systems has an opportunity for change conflict something going wrong in particular in the ML space you see here like you'll have containers those containers on premises may run against CPUs but then when they move to the cloud these GC GPUs of various sides they could be a six or FPGAs or you name it even ML frameworks often operate differently in different environments and you need that stability as well and then finally scalability I think you're going the opposite direction on the volume is there any like I'm now like about two feet from my face down here okay so as far as scalability is concerned same deal you often want to have the highly scalable so you you start your ML and one minute later you realize you're not going to you know converge for the next 450 years maybe you'd like to add some more machines that's a perfect opportunity for scalability so what's really good at composability portability and scalability yes that should be clear it's Kubernetes right like it's already doing all of this and we just like we're just going to talk about like how it helps with machine learning specifically here so here's like a really high-level picture right like I want to give this message across and it may be obvious to some of you but I just want to like drill out a little bit more because I want people to think of Kimberl's this way in that like Kimberl is abstracting out a whole lot of things right it's abstracting out your your your cloud whether it's like a public cloud or a private cloud you don't have to worry about that because there are people worrying about it and so you have like separation of responsibility and then you have a variety of hardware resources that that you might want to consume you may not want to consume all you may want to consume some but you may want to like extend it to consume something else so Kimberl's abstracts all of that and then you have a whole bunch of like operating systems and like kernels and versions and so on it's like that's another whole beast and like host demon and the Kimberl's provides you primitives where you can have separate teams managing that and still like Kimberl's continues to work for you and it like shields your end users in this case like data scientists or say your ML practitioners from all those churn that's going on right like they don't want to know all of that why should they know that and then like you have the core Kimberl's itself which I'm not going to get into in this talk but hopefully like people have some idea of what Kimberl's is and in addition to that you also get a whole bunch of other primitives that are very important for managing infrastructure at scale like you get primitives like authentication and authorization with our back you get like built-in monitoring that's extensible to almost all of your applications you get like built-in logging Coda namespaces so these are like common set of functionalities that you can apply for a whole bunch of workloads right so now given that like you've got into this level that you have this common infrastructure that you can deploy on now what are you going to do like the more interesting part is like running the real applications right like that's that's the reason why all this infrastructure even exists so you can go and like choose your application you're not like restricting you to some specific set of applications you can go choose your own like distributed storage you can go choose your own database or your block store you can go choose your own like I don't know a map reduce solution or you can go choose your own like ML training operator or you can you can choose your serving service curious doesn't restrict you but the good part is it's pretty easy because like all the rest of the problems are solved so you can have like individual groups of people focusing on just that and they don't have to worry about the rest of the infrastructure that's pretty cool right like you have you have a large organization and now you know how they can all like cooperate with each other and still add value to the rest of the direct end consumers so in this case the end consumers are most likely going to be data scientists and they are going to focus on their workflows which is like say Jupiter or it's like 10th floor or cafe or whatever it is they only think about that they don't think about the rest of the infrastructure right and that's sort of the Google model and like it's totally possible with Kubernetes and we are starting the journey now so like specifically Kubernetes already supports accelerators in an extensible manner in that like you don't have to wait for upstream to support everything GPUs are already supported and like there's more and more enhancements happening along that in 2018 where we'll be having like performance optimizations and all of that funness and there's also going to be support for FGAs and like high performance snakes and so on so upstream is like enabling all sorts of extensions that unblocks you from doing what are awesome things you want to do and in addition to that there are like a lot of application deployment parameters already in there there's like jobs and there's like staple sets which lets you like describe some of your common machine learning workflows and so you don't have to like go and rebuild all of this you can just like you can become productive in a day or two with a pre-existing Kubernetes cluster rather than like going and buying a machine from like from store nearby and like starting to install drivers and all then spending like a month and then now you're starting to go do the cool thing right you don't have to do that like there's already a solved problem and it scales to like thousands of nodes so if you get to the point where you're going to run many experiments at the same time then you can actually do it with Kubernetes and and if you are running in a public cloud for example you you don't have the provision for your peak utilization like you just go use your single machine and when you're ready to like go and launch say a thousand experiments the resources there for you and Kubernetes still works you don't have to shift to a different platform and container packaging is already a standard right like you don't again you don't have to reinvent the wheels there so all these things are common problem for machine learning as well and Kubernetes would solve that for you and there's actually more right like I hinted a little bit on like auto scaling so auto scaling is like working in like most Kubernetes managed services today we have support for like priority and eviction but I like say if you have an intern and you it's intern hiring season and you have like 100 interns in your company each one is like doing an ML experiment but you have the shared resource and you have a researcher who's having a conference deadline and they have to get there get their training and like get their models built are you going to have the interns come and like ruin their conference no right like do you how you going to create a separate system for that why Kubernetes provides all the parameters for you already where you can set priorities for individual users and and make sure that like a low priority user does not go ahead and like take away all the other resources that are meant to be consumed by more important people or more important things that are happening within your organization we also I'm going to I'm just going to state this but if you have more questions about this I'll talk I'll be I can I'm happy to like explain further after the talk Kubernetes is assuming adequate network bandwidth so this is sort of a fundamental distributed system design assumption that Google has evolved to over time so like our general recommendation is like old person your network don't try to solve like locality issues too much so that's the kind of model like upstream is moving and moving towards and it was already in that direction but we still support data gravity for scenarios where you don't just cannot play the old person that puts and we also provide like a whole bunch of primitives like labels and and software drivers and like device plugins and so on which lets you like manage the life cycle of the hardware itself and under software that goes on to power that hardware like for example the immediate drivers you can manage all of that using Kubernetes right so it's like this because it's like one common API on top of which you can layer everything and so management becomes much simpler and you don't have to learn new systems on manage new systems through the same boring job right so that's the main message here but right you you want to use machine learning on Kubernetes they talked about all the awesome infrastructure stuff that like curious can provide but like I said earlier data scientists or ML practitioners they don't want to see that infrastructure right like they don't want to learn the Kubernetes API like that's that's not like that's not the specialization right like that's not the thing that's most fun for them so are you going to like tell them hey go learn Kubernetes go learn Docker go learn containers and then like now now we can start doing whatever you want to do like look at the sheer number of things that you have to learn in order to start becoming effective in using Kubernetes for machine learning it's like I mean it's it's a fire hose right like you probably have to do like ten courses before you can like even get to the point of like doing some some some interesting machine learning and production you don't want people to do that right so wait what do you do now so with that we are proud to announce Kubeflow we are not talking about this incredibly broadly just you here and those on the stream we're going to be talking a lot about a lot more shortly but the summary is we want to make it easy for everyone to learn deploy and manage portable distributed ML on Kubernetes everywhere just like Kubernetes we very very strongly believe that this should work everywhere in the world not you know on-premises on your laptop on your cloud provide a choice so you know we were we don't have a ton of time but the idea is we very very much embrace the philosophy that we had said earlier around composability portability and scalability Kubernetes and Kubeflow should provide this out of the box speaking of the box inside the box at the start and we are just getting started here we give you a Jupiter hub thank you very much to the folks at Jupiter I saw a UV back there a TensorFlow training controller which auto scales depend not it doesn't auto scale it deploy scales based on what you have available to it so if you have CPU or GPU or multi GPU you can configure it very easily TensorFlow serving deployment and the wiring and service endpoints between them to make it very easy to get going out of the box and what's in the box you saw this earlier it is just these steps in it over time we would love to expand it we'd love to make it each step deeper offer a lot more options but that's up to the community and the people who want to take it there using Kubeflow will ideally look like this you do kube control kube control and that's how you pronounce it kube control apply components and it will create it on your laptop you do the exact same command on your mini cluster you do the exact same command on your larger cluster and it will work and we'll skip over just to get to the demo the interesting part yes yes I'm gonna have a hard time saying kube control well you could say it wrong I mean that's fine all right so I'm gonna try to do a live demo I'm not sure how this is exactly gonna turn out but let's see hopefully the demo got to the thing so what I have here is a mini cube cluster so you can make sure that it's obvious that it's a mini cube cluster I'm gonna what I'm gonna I already have the kube flow repository cloned so I mean I could probably like show the kube flow repository for you just to give you an idea of like what we mean by kube flow here we go so this is a repository I've cloned this I'm at the base directory what I'm going to do is I'm gonna apply all the components in there okay I need to change there we go so I just went ahead and like deployed kube flow the next step is like I'm going to show what pods exist in here so what we have here is like we have a TensorFlow service and then we have a Jupyter hub and then we have a TensorFlow operator I'm gonna go and like try to show how we are going to use each of these things in just a bit but I just want to show this is what is in the box as part of kube flow as of now right the next step is like I'm going to open up open up Jupyter hub oh god this echoes like so let me also like list the services that are here and then so I'm going to use a mini cube command for opening up service which is mini cube service and then pointed at a load balancer and so here we go I I'm opening up well I mean cool as these awesome proxies that get in the way of demos let me turn off those proxies and then that should work now so here we go so you have Jupyter hub just working out of box for you right like and by default we have like a dummy authentication system which you can like replace with your own organization's favorite authentication system be it like Google author or GitHub and so on so let's say I'm just going to log in I'm going to start my server I'm going to we have two options now with TensorFlow you have a CPU and a GPU image since this mini cube I don't really have that much of resource on my teeny tiny Mac so I'm going to like stick to the minimum amount of resources I need for this demo I don't need GPUs I'm just going to go ahead and like launch I'm going to go ahead and like launch my notebook so you have a notebook here which has a few prebuilt models that's part of the intense flow garden and it's just there to like show that you can get going pretty easily and that like you have all the tooling you need in order to in order to like start start working with TensorFlow right and to demonstrate this what I'm going to do is like I'm going to I'm going to run a benchmark there's a specific reason why I'm choosing a benchmark for this demo it's because if I were to like go ahead and like try to train a real model like inception or rest that it's going to take quite a while and it's probably very boring for you so what I'm going to do instead is like choose a benchmark that shows them like really nice numbers and also like show the fact that you can iterate locally on your laptop and when you move to the cloud you get this like infinite bandwidth whether the cloud is like a public cloud a private cloud the same workflow the workflow remains the same but you get like much more powerful hardware and much more scalability all within like the confines of the same interface so I'm going to go ahead and like start I'm going to go ahead and like start a benchmark here and the benchmark is very simple all that the benchmark is doing is like it's going at it like trying to run a rest net training model if you're not familiar with rest net that's you can totally forget about it just consider it to be like an image image model where it can predict what's in an image and and here I'm training with like synthetic data like pulling data from the cloud in a demo environment is again like pretty boring so the synthetic data here is all like part of the standard TensorFlow benchmarks and what's happening here is like behind the scenes it's it has generated some some synthetic data and it's starting to train and you can see here that like the training rate is like literally 0.5 images per second so it's pretty slow because I got like a laptop which is not even like connected to power so all sorts of like awesome things are happening behind the scenes to keep the demo going so the training rate is like pretty low here so this is not much fun right but there is value here because if you want to just like iterate on your model and like just play with the very basic architecture you don't have to be in the cloud you can be in your airplane or you can be at the comforts of your home and your couch and you can still like do your work and when you get back to work the next day which is what I'm going to show now which is what I'm going to show next you can let's say you let's say you have a cumulus cluster already running in some cloud in this case I'm conveniently using Google cloud because that's the thing that I'm familiar with and it's pretty awesome so here we go so I have a I have a cluster already set up in Google cloud and I have like GPUs provisioned as part of this cluster and I'm going to use the same cube control workflow right just to prove that like it's pretty portable and I have these five nodes which have GPUs in a GKE cluster and like drivers and everything are pre-installed right like you don't you don't have to like worry about that so I'm going to do the same cube control apply here right I'm literally the same directory on my laptop and I did keep control apply the next step is like I'm going to go to my I'm going to go list the services here and I have the same TensorFlow Jupyter hub load balancer and as you can see here the external IP hasn't been allocated yet so we got to like wait for the external IP to be allocated while that happens I'm also going to explain to you about the operator which is the other part of this right like Jupyter gives you this interactive workflow where you can train interactively you can pull down data you can like do some data manipulation but that's not great when you want to take it to production right like when you want to take it to production you want like auditing you want to like checkpoint your workflows you want to know you want to make it reproducible and you probably want to have like some CACD pipelines especially if you want to do like ETL or batch or like online training and all those kinds of like interesting scenarios right and you can use Kubernetes for that as well and and there's an interesting project for this which is part of TensorFlow it's coincidentally its name TensorFlow slash kates and what it does is like it's basically a operator if you're familiar with the corus operator terminology and what this operator does is like it gives you a a Kubernetes style declarative API where you can go ahead and like express what sort of training you want to do right like whether it's like training on your laptop with a single CPU or this like training in the cloud with like many many GPUs it's the same declarative interface all you do is like make sure that your TensorFlow runtime is available within a Docker image and we have some sample Docker images for that and then you bring in your own like TensorFlow code like the code that you have written on Jupiter just transfer it like maybe like load it load it on to like say your object store and pull it down or make it part of your container and then you use this declarative API to go ahead and like tell Kubernetes tell this operator that like go ahead and like start TensorFlow training right and like do the training and then go ahead and like push the model somewhere else and that's all like automated for you and you also get like TensorFlow code integrated with that so I'm going to go ahead and like deploy one of those models as well I'm not sure that you guys are able to see this it's probably pretty hard to read during the demo I'm going to run through this but like please go ahead and like take a look at this after the demo the thing that I want to highlight here is like I'm going to deploy a distributor TensorFlow which is considered to be kind of hard and that's one of the reasons like people keep playing with like larger and larger boxes so here you have like distributor TensorFlow where you are configuring a master which does not have GPUs and then you're configuring three workers which has GPUs and then you have a parameter server right and you're expressing all of this in a declarative API and I'm running the same benchmark right the one that I ran on the laptop I'm going to run the same benchmark and I'm also like go going to go ahead and like deploy this in my GKE cluster let's see Cube CDL apply dash I'm going to go ahead and do this so I'm going to move back to my work cluster here I'm going to go look at the workloads view and what we see here is like we see we see a bunch of pods being created right so I went ahead and like I went ahead and like applied a manifest and that manifest ended up creating that manifest ended up creating a custom operator specification and this object and the controller watching this object went ahead and created created the TensorFlow entities that was expressed through the declarative API so you have a master running here you have parameter server and you have a bunch of workers running here right and these workers are going to take some time in that like they're going to take that info they're going to go and like warm themselves up like initialized TensorFlow one and start training but until then like let's switch back to and switch back to our original yeah here we go so let's switch back to the Jupyter site where we're doing interactive training and now let's say that I have come back to work I did something at home I've done some training now I want to like actually take you to the next level where like I want to continue doing some interactive training but I want to like start processing a lot more data and at this point I need more memory I need more CPUs I need more GPUs right so at this stage okay so here we go so I'm right now I'm in cloud I went through the same process of like setting up Jupyter but like Jupyter caches my identity so it put me in a notebook because the notebook already exists right I'm going to go ahead and like run the exact same benchmark but this time I'm going to run it with GPUs so I've changed the I've changed the command line the benchmark command line here a little bit to make it work with GPUs it's mostly about removing a bunch of other options that made it work with CPUs but the point that I wanted want you to take here is that you can see like in just a second you'll see that the the training rate is like so much faster right like this is not something Kubernetes is doing it's like it's just a power of like GPUs and the optimization between TensorFlow GPUs but the point to take away here is that like your stuff is portable right like everything is portable your workflows portable everything remains the same and now here you go you move from like point for images to like 200 plus images and when you move to the distributed setting which which we are seeing with the operator your your productivity level improves even further let's see if the if the distributed job actually completed if not we'll probably have to wait for that so I'm going to go ahead and drill into the pods view and I'm going to look at the logs for the pod okay so the command did run successfully and it's spamming me that it ran successfully but the training rate here is like 240 images per second right so so you can start scaling linearly and you don't have to worry about like Neuma and like with them on the same PCI socket like screw all that you don't have to know all that like just assume that you have some finite amount some some some usable amount of network bandwidth then just keep scaling like improve your developer productivity right and so this is not the only part the other part that we want to show is like let's say the whole point of this demo was like I want to know if it's a hot dog or not right for folks who know what hot dog or not means let's say that I'm being very naive but like I haven't I don't know any machine learning right like all I do is like I go ahead I try to find I try to find a picture in this case it's clearly not a hot dog but I built a stupid system which just looks at the name of the file and it says that it's hot dog or not right like clearly that's not a great system no we want to make it smarter and so let's say let's apply some machine learning right in this case I'm using like pre-existing models that have been trained for for doing this kind of task and if you're curious it's like then it's an inception model so I'm gonna do the same thing right like I'm gonna go ahead and like deploy I'm going to ask it like is this a hot dog with a real hot dog image and let's see what it says is it one of the same thing maybe the service is still coming up or is this a demo fail cross likely a demo fail do I have time to do like debugging I don't know I think we're all I guess I have two more minutes so let's see so let me show what's happening behind the scenes while the demo may come up so there's a model service here right like the model service what's what's going on in the model service like it stands for serving and it's preset up for you where with the model server you can configure it to to make it point at like your own model in this case like for the demo we're making it point at a model that is hosted on GCS for us so it's it's being pointed at a model that's that's stored in a GCS bucket but imagine that like you have serving available and then you have your your your Jupyter workflow available you built a model right and the model is like stored on some up some object store that shaft storage or like your local laptop all you have to do is like go ahead and like change this deployment and say okay I'm changing the command line arguments of that and making it point at my new model and then you got serving going right you don't have to think about that just have to do that one small thing and that's it let's see if let's see if you can give this another try just one more time David this did work let's see if the smart server is actually a sponsor it's saying it's it's a hard dog right like we all know it's hard dog but it's saying that wait I might be tricking you let's see if I'm tricking you right like what if I what if I throw at it something that's not a hard dog and it says so the thing is you can do awesome things without having to like reinvent the wheels and without having to like know everything from scratch so yeah okay so we are incredibly out of time but I will be very quick so oh shoot so we are incredibly out of time so that's it you took something and you deployed in three places but but to be honest that the message here is if you're a data scientist you didn't have to think about any of that you didn't have to think about Kubernetes or learn it you didn't have to do any special deployments we took care of it for you we expanded it for you you began to really decouple the infrastructure from what the data scientists actually do and so the answer is yes for now we are just getting started we would love for you all to come and help contribute we have an open source repo github whack Google whack Cube flow thank you we we really are just getting started we want this to be a community where we come together we know that almost everyone here anyone doing ML has written some custom bespoke solution for their team we would love to help replace that so you can focus on the hard stuff and and you can throw away the custom stuff you written or augmented and upstream it or whatever it works at minimum just share your experience yeah what you do every day what works and what doesn't work that is very valuable so that's it thank you so much for the time oh I guess well sorry we do have two minutes for Q&A if you want yeah we have like five more minutes I guess oh well we'll hang around be here but and we technically have three minutes for Q&A the next one's at 245 oh oh oh I yes I don't know where it is I'm sorry I think 545 430 430 I have no idea I have no idea sorry look at the schedule there's an ML salon yes how would you set the node to be GPU capable is this so on on a laptop like maybe let's ignore the laptop on a workstation there's one part pending which is enabling installation of drivers with device plugins we're working on that so we're working with upstream community essentially on that so that part is pending but if you move to any cloud providers like any managed computers it's already there you don't have to you don't have to think about it right so we're working send us a note if you're having problems with it well we'll find you the right person in the future yes very soon the idea here and again we want to be cloud neutral here the question was will we support TPUs which is for those that don't know that's just Google's custom TV ML chip as you know many clouds are investing in various custom ML chips we want to we want to create a real abstraction between this and and whatever cloud provider would like to participate in Kubeflow and help us surface those custom chips we are more than happy to include it yeah it's like TPU is like 5% of all of this right in that like you're just changing one line of code literally for TPU exactly everything else is the same so everything else is like generic nice pipe pipe or shirt there for anyone any other questions comments okay thank you very much you were we'll wait around and we'll be outside thank you


Welcome to Happiness Isn't Brain Surgery with Doc Snipes. This podcast was created to provide you the information and tools Doc Snipes gives her clients so that you too can start living happier. Our website, docsknipes.com, has even more resources, videos, and handouts, and even interactive sessions with Doc Snipes to help you apply what you learn. Go to docsknipes.com to learn more. Hi everybody, and welcome to Happiness Isn't Brain Surgery with Doc Snipes, practical tools to improve your mood and quality of life. Today we're going to talk about how to stop people pleasing. It's important to be able to set boundaries. When we people please, a lot of times we negate our own feelings, our own needs, and our own wants in order to please other people. Now sometimes people pleasing is okay. We do things to make others happy, and that brings us happiness. That's wonderful. But when you're people pleasing to the extent that you're getting overly tired, you're getting worn down, you don't feel like you have anybody helping you out, then that's when it becomes a problem. So the first thing to do is figure out why do you people please? Are you trying to get approval? You need others to tell you you're okay because you don't feel okay yourself, or you're afraid of being alone. That fear of isolation, fear of rejection is huge in people who people please a lot of times. They're afraid that if they aren't actively people pleasing and doing things to make others like them, that they're going to be alone. And I would encourage you to work on your self-esteem and look at why are you all that in a bag of chips? Why are you a good person? And we're going to talk in a little while about the fact that everybody has strengths and weaknesses. We're all fallible. Everybody's perfect. So recognizing and accepting that, but also accepting that you're a good person despite the fact that you're not perfect, just like your best friend is probably a good person despite the fact that he or she is, guess what? Not perfect either. So figure out why you do it. It could be for approval. It could be because you fear rejection. It could be because when you grew up, you were always told or you always saw others people pleasing because it was not safe to say no. It was not safe to set boundaries and say, no, I don't want to do that. Or this is my preference. Maybe you grew up in a household where there was an alcoholic or an addict or someone with borderline personality disorder. And you know, those parental units could kind of turn on a dime and go from being happy to being wickedly angry. So it wasn't safe if you weren't people pleasing. You were always walking on eggshells trying to keep them happy. Look at your current environment. Most likely that's not the case anymore. Most likely you're acting as you acted to stay safe when you were little and now the people around you are happier, healthier and able to engage in more productive relationships.  If you felt like you were having to walk on eggshells, if you'd still feel like you're having to walk on eggshells in certain relationships, you really want to evaluate how you can improve those relationships or buffer yourself from the stress that it causes. So you don't feel this constant fear of rejection or somebody getting angry at you. The final reason people please is a lack of self-awareness. They do things for other people because they don't know what they want, what they like. They have always grown up kind of being a chameleon for one reason or another. It may be because it wasn't safe to have their own opinions or it may be because they weren't ever encouraged to figure out what their opinions and likes and stuff were. But there's a lack of self-awareness.  So once you figure out why you do it, then you can start addressing it. When you stop people pleasing or in order to stop people pleasing, you need to have a good self-esteem. You need to be able to look in the mirror and go, you know what? I'm not perfect, but I am a really awesome person. And if so and so has a problem with that, that's their problem. And that is way easier said than done. Don't get me wrong. But it's important to be able to do that. It's important to recognize that it is not your responsibility. It is not your responsibility to make other people happy. We are all responsible for our own emotions. So if you do something somebody doesn't like, you know, if you unintentionally did something to hurt their feelings, then apologize for it.  But for example, if you're a college student or you're somebody getting ready to go to college and your parents want you to choose a certain major and that just doesn't appeal to you. So you choose the major you want and they're mad about it. Well, let them be mad. That's more about them than about you. So, you know, that's what I'm talking about when I'm saying that if you do something that somebody doesn't like or they have a differing opinion, you know, there are ways you can work it out, but you need to be true to yourself. You need to live authentically. So the other, the next step is to examine the benefits and drawbacks of people pleasing. Why do you do it? What does it get you? Does it get you? What kind of rewards does it get you? Some people people please because they don't want to be cut out of the will. Some people people please because they want to maintain peace in their household. Some people people please in order to get approval from others and to look better in somebody's eyes. You know, what are your benefits and what are the drawbacks? Yes, there are drawbacks or you probably wouldn't be listening to this. People pleasing is exhausting because there's always other people who want to be pleased and you're only one person. People pleasing takes care of other people's needs and yes, it can be rewarding, but it can also be very draining. So the drawbacks to people pleasing tend to revolve around you running out of energy, getting worn down and not getting your needs met. The next step is to look at the benefits and drawbacks of taking care of yourself and some people that thought of taking care of themselves and putting themselves first is scary as hell and I get that, but you've got to remember that if you are not there to people, please, you know, if you are not there, you can't be there to people, please. You can't be there to help somebody out if you're worn down and you're, you know, just a puddle of quivering. I can't function mess. So it's important to take care of yourself. So the benefit to taking care of yourself is that you can be there for other people and you can enjoy life. The drawbacks is it may tick some people off, you know, when you first start setting boundaries and going, I can't help you move this weekend or, you know what, I can't pet sit for you anymore or whatever the boundaries are that you need to set. Initially, people are used to you not putting up any resistance. So they're going to kind of bristle and go, oh my gosh, she told me no. That's OK. Part of the way to work around this and make it less of a drawback is to communicate effectively and to try to create a win-win. We'll talk about that in a few minutes. But you want to make a list on, you know, four separate sheets of paper, the benefits of people pleasing, another one, the drawbacks of people pleasing, the benefits of taking care of yourself and the drawbacks of taking care of yourself and complete it and then go back the next day and see if there's anything else that you want to add to those sheets. So you get an idea of why is it that you want to stop people pleasing? Why is it important to your health, well-being and welfare? The next step is to identify who and what is important in your life. In order to figure out what's worth your energy and what's not worth your energy, what things that, you know, if you're going to have to choose among activities and pleasing people, who is most important to please, you've got to know what's important in your life. And that includes yourself. Again, if you are completely worn down, you're not good to yourself or anybody else. So you need to be happy and healthy. But what else and who else is important in your life? And that will help you decide how to use your energy, what things to say yes to, what projects to accept, what, you know, it will help you make more educated decisions about when to people please. Because we all do it sometimes, you know, it's just one of those things. We like to help other people, but there has to be a limit. There has to be some boundaries set. Start including yourself and your own needs on your daily to-do list because you are important. So that means laugh for 15 minutes a day. That means eat a relatively healthy diet. That means, you know, do things that make you happy and help you move towards those people and things that are important in your life. You are important. Don't be afraid to communicate and confront. People can't read your mind. Let me say that again. People cannot read your mind. So it is very important for you to communicate what your needs are. You got to know what your needs are first, but then you need to be willing to communicate them. So working on a sort of communication may be really important. If you're not used to standing up for yourself or saying what you need, or if you're afraid to say what you need or you want, then working on those communication skills will help you start moving towards living more authentically, not people pleasing as much and having healthier relationships. Be willing within that to ask for what you need.  It's not that you don't like that person. You just need some quiet time. You need some time to yourself. That is not an unhealthy request. That is not unreasonable. So when, you know, if that comes up, asking your partner for that and saying, you know what, I just need this weekend to myself. It's not because I'm angry at you or anything. It's just I need some downtime. Some time to, you know, relax in my own skin. And they may not like that at first, but effective communication, helping them see that, you know, you're not cheating on them.  You just need some space to breathe. That's totally acceptable. So creating a win-win, you know, letting them know if I have this weekend to myself so I can recharge, you know, the next weekend, maybe we can do something more fun and propose something.  Even if I, you know, maybe it's somebody who's really important to me and they want me to go to this roller coaster park. The win-win I could create is I could say I will go, but I'm not riding the roller coasters. I'm terrified of roller coasters. And that's my boundary. I will go with you. I will watch you have fun, you know, whatever if that's really important to you, but I'm not riding the rides. So setting boundaries and creating a win-win can be important. And again, not expecting mind reading. If you don't want to go do something and even if you kind of quiver your, quiver your lip and make a, make a face that says, yeah, you know, that sounds really icky, people may not pick up on that. So it's important not to drop hints. My daddy always used to say that. He's like, I don't take hints. If you want something or you need something, you need to tell me straight out. And it was true. So a lot of people are that way and it makes life so much easier. If they're not trying to guess, what are you going to like?  It's a lot easier if both partners put in their ideas about what they want to do and why then one partner trying to guess, well, what is what might this person enjoy doing? You know, at Christmas time, I always encourage my kids throughout the year and my husband as well to keep a list of things that they might want for Christmas or their birthday or whatever, because I can't mind read and the older they get, the more expensive their presence gets.  So if they keep a list of things, then I'm more in tune to what they may want and then I can choose from that list. So there's still a little bit of a surprise, but it makes it easier on me because I'm not stressed out trying to figure out what they might want and it makes it easier on them because they don't have to act like they like something that they never wanted in the first place. Remember that social conventions are mostly arbitrary and you generally have no obligation to follow them.  People are often going to ask you to do things in hopes that you will, but a lot of times it's not going to be the end of the world for them or for you if you say no. So it's important that you are willing to assert your own boundaries and not feel obligated to do something.  Don't necessarily feel obligated to invite them to your birthday party if it didn't turn out well, if it was oil and water.   It's not that you don't like people. It's just that you're keeping it to a very small number. Another thing you can do to stop people pleasing is challenging your inner critic because your inner critic, especially if you grew up where you were being told that people pleasing was necessary, your inner critic is going to say, you have to do that.  You need to step up to the plate and sometimes you need to step back until you're inner critic to be quiet and address what you need in the here and now. Your inner critic is going off stuff that it learned when you were little, when you learned that you learned growing up, but that's not necessarily how it is now. Your inner critic could be driving you to get worn down. So sometimes you got to step back and say, no, that's not in my best interest. You are your own best advocate once you know what you need. So it's important to get in touch with yourself and figure out what do you like? What do you dislike?  And I truly have no opinion. I just want something edible. There are other times where we're going out to dinner and something does sound good. And I'm like, well, I really want to go to the salad bar at this restaurant or something. And that's OK. You know, it's OK not to have an opinion. But you need to have opinions sometimes and sometimes you will have an opinion. So once you know what you need, then you can start saying what you need and what you want. And then when you don't have an opinion, people are going to be a little bit more likely to believe that you truly don't care if you've asserted your opinions before. And you could say, you know, this time I just, I don't care. Whatever movie you want to go to is cool with me. Try to create a win-win situation, though. So when you are working with other people, when they're asking you to do things, when you're saying no, you always want to try to create a compromise that works for both people. So maybe you're not going to, you know, help them move this weekend or help them out with a project at the office. But you can do something else for them. Sometimes it's not possible, but win-win is one way to use assertiveness skills to stop people pleasing, but to avoid ruffling feathers. Play it a day just for yourself, one day without any responsibilities for anyone else, and do just what you feel like doing for the whole day. You know, you need to rest, recharge and rejuvenate. I encourage people to do this once a month. Find a day once a month that you can just have the whole day to yourself, not doing laundry, not cooking meals, not, you know, none of the chores you are just going to do whatever the heck you please for that one day. And if you can't squeeze out a whole day, then squeeze out an afternoon or a morning. Everybody can find an afternoon or a morning somewhere where they just say, you know what, today's about me. Share yourself with others. Instead of always focusing on what other people might enjoy, invite someone to do something with you that you're interested in or that you want to do. Relationships grow stronger, which means that they're also more resilient to adversity and, you know, anything else when each person shares themselves with the other person. So by asserting your opinions, you're letting people get to know you. You're letting people in so they're coming past those walls a little bit and forming a stronger bond. That's the way to build healthy relationships. Synergize, recognize and embrace the strengths and weaknesses, the human fallibility in yourself and other people. Because you know what? Everybody makes mistakes. Everybody has weaknesses.  So if you're trying to remodel a house, for example, and I've shared with you before that woodworking is not my strength. I am not that meticulous. So I know that that's just not going to work for me. I can paint. I'm good at painting. So when we're working together, we identify what are our strengths and how can we work together to accomplish this task that we both want to accomplish. And I can state my preferences, you know, I would rather do the preparation for everything, you know, pull all the carpet out and whatever, and then paint. And I would prefer if you would do the woodworking and this, that and the other thing over here. And we can talk openly about what our preferences are. If when you're doing something, you're happy about doing it. You feel confident about doing it.  People pleasing is very one sided. You're giving, giving, giving, giving, giving, and you're not letting people in. In healthy relationships, the people that you're in relationships with want to give back to you. But if you're constantly people pleasing, then you're getting worn down and they don't know what to do to give back to you. So be open, communicate, know who and what is important to you so you can choose where to spend your energy. Figure out what's important to you and what you like so you can share it with others so they have an idea about what to do to kind of pay you back, so to speak, because all relationships are give and take. People pleasing is give, give, give. Healthy relationships are give and take. Hopefully this has given you some ideas on how to stop people pleasing and start developing healthier relationships. Thanks for tuning into Happiness and Brain Surgery with Doc Snipes. Our mission is to make practical tools for living the happiest life affordable and accessible to everyone. We record the podcast during a Facebook live broadcast each week. Join us free at docsnipes.com slash Facebook or subscribe to the podcast on your favorite podcast player. And remember Doc Snipes.com has even more resources, members only videos, handouts and workbooks to help you apply what you learn. If you like this podcast and want to support the work we are doing for as little as three ninety nine per month, you can become a supporter at docsnipes.com slash join. Again, thank you for joining us and let us know how we can help you.